我有一个简单的Flask路线,我想要捕获文件的路径。如果我在规则中使用<path>
,则适用于/get_dir/one
但不适用/get_dir/one/two
。如何捕获任意路径,以便将path='/one/two/etc
传递给视图函数?
@app.route('/get_dir/<path>')
def get_dir(path):
return path
答案 0 :(得分:41)
使用path
转换器捕获任意长度路径:<path:path>
将捕获路径并将其传递给path
参数。默认转换器捕获单个字符串,但以斜杠停止,这就是您的第一个网址匹配但第二个网址不匹配的原因。
如果您还想匹配根目录(前导斜杠和空路径),则可以add another rule设置路径参数的默认值。
@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def get_dir(path):
return path
还有其他built-in converters,例如int
和float
,对于更复杂的案例,也可以write your own。