Python Tornado web应用程序路径上的多个变量(正则表达式组)

Python Tornado web应用程序路径上的多个变量(正则表达式组),python,tornado,Python,Tornado,我正从瓶子变成龙卷风。在瓶子上,我可以轻松定义具有多个可变部分的路径。像这样: @app.get('/api/applications/<resource>/running_actions/<action_id>') def get_application_running_action(resource, action_id): # Return running action(<action_id>) of the application (&

我正从瓶子变成龙卷风。在瓶子上,我可以轻松定义具有多个可变部分的路径。像这样:

@app.get('/api/applications/<resource>/running_actions/<action_id>')
    def get_application_running_action(resource, action_id):
    # Return running action(<action_id>) of the application (<resource>)

然后ApiRunningActionsHandler将搜索应用程序并为应用程序运行操作。但是在ApiRunningActionsHandler Get()上,只有一个路径参数。有没有办法在Tornado上这样做,或者我只需要在ApiRunningActionsHandler上再次解析路径?这实际上甚至可能不可能,因为我想将对/api/applications/(*)的请求定向到另一个处理程序。

只需将第二个参数设置为ApiApplicationHandler.get可选:

class ApiApplicationHandler(RequestHandler):
    def get(self, resource, action_id=None):
        pass

我想出来了。主要问题是我的正则表达式捕捉到了一切。所以

r"/api/applications/(.*)/running_actions/(.*)" 
实际上结果只有一组。因此,没有设置action\u id参数

第二个问题是必须首先定义最具描述性的路径

这项工作:

class ApiRootHandler(tornado.web.RequestHandler):
    def get(self):
        pass


class ApiApplicationHandler(tornado.web.RequestHandler):
   def get(self, action_name):
       pass


class ApiRunningActionsHandler(tornado.web.RequestHandler):
    def get(self, action_name, action_id):
        self.write("action_name: " + action_name + ", action_id: " + action_id)

app = tornado.web.Application([
    (r"/api/applications/(\w+)/running_actions/([0-9]+)", ApiRunningActionsHandler),
    (r"/api/(\w+)", ApiApplicationHandler),
    (r"/api/", ApiRootHandler),
    ])
app.listen(8888)
tornado.ioloop.IOLoop.current().start()

谢谢,但可能我还不太清楚到底是什么问题。反正我把它修好了。看看我的答案。
class ApiRootHandler(tornado.web.RequestHandler):
    def get(self):
        pass


class ApiApplicationHandler(tornado.web.RequestHandler):
   def get(self, action_name):
       pass


class ApiRunningActionsHandler(tornado.web.RequestHandler):
    def get(self, action_name, action_id):
        self.write("action_name: " + action_name + ", action_id: " + action_id)

app = tornado.web.Application([
    (r"/api/applications/(\w+)/running_actions/([0-9]+)", ApiRunningActionsHandler),
    (r"/api/(\w+)", ApiApplicationHandler),
    (r"/api/", ApiRootHandler),
    ])
app.listen(8888)
tornado.ioloop.IOLoop.current().start()