37

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

@app.route('/get_dir/<path>')
def get_dir(path):
    return path
4

1 回答 1

75

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

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

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

还有其他内置转换器,例如intand ,对于更复杂float的情况,您也可以编写自己的转换器。

于 2013-02-27T16:41:40.067 回答