在Flask路线中捕获任意路径

Dar*_*ech 24 python werkzeug flask

我有一个简单的Flask路由,我想捕获文件的路径.如果我<path>在规则中使用,它适用/get_dir/one但不适用/get_dir/one/two.如何捕获任意路径,以便path='/one/two/etc传递给视图函数?

@app.route('/get_dir/<path>')
def get_dir(path):
    return path
Run Code Online (Sandbox Code Playgroud)

moo*_*odh 50

使用path转换器捕获任意长度路径:<path:path>将捕获路径并将其传递给path参数.默认转换器捕获单个字符串但停在斜杠处,这就是您的第一个网址匹配但第二个网址不匹配的原因.

如果还要匹配根目录(前导斜杠和空路径),则可以添加另一个规则来设置path参数的默认值.

@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def get_dir(path):
    return path
Run Code Online (Sandbox Code Playgroud)

还有其他内置转换器,如intfloat,并且可以编写自己的转换器以用于更复杂的情况.

  • 需要明确的是,“&lt;path:path&gt;”中的第一个“路径”是转换器,第二个是传入的值。因此您可以编写“@app.route('/&lt;path:my_path&gt;')” ` 如果将参数命名为 my_path。 (4认同)
  • 对于&lt;path:path&gt;不起作用的那些,请确保您删除static_url_path,https://github.com/pallets/flask/issues/1633 (3认同)
  • 感谢您的精彩答案和支持文档! (2认同)