在 Flask 路由中捕获任意路径
Posted
技术标签:
【中文标题】在 Flask 路由中捕获任意路径【英文标题】:Capture arbitrary path in Flask route 【发布时间】:2013-02-13 13:47:09 【问题描述】:我有一个简单的 Flask 路由,我想捕获文件的路径。如果我在规则中使用<path>
,它适用于/get_dir/one
,但不适用于/get_dir/one/two
。如何捕获任意路径,以便将path='/one/two/etc
传递给视图函数?
@app.route('/get_dir/<path>')
def get_dir(path):
return path
【问题讨论】:
【参考方案1】:使用path
转换器捕获任意长度的路径:<path:path>
将捕获路径并将其传递给path
参数。默认转换器捕获单个字符串但在斜杠处停止,这就是您的第一个 url 匹配但第二个不匹配的原因。
如果您还想匹配根目录(前导斜杠和空路径),您可以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。
【讨论】:
对于那些[^/].*?
。开头的[^/]
意味着它至少需要一个非斜线字符,之后可以选择出现任何其他字符(包括斜线)。我希望这种行为,如果只是因为“索引页面”是一个非常常见的概念,并且匹配 URL 中的空字符串不是我见过(或想要)的行为。
非常感谢。 “路径”正是我所需要的。
要清楚,<path:path>
中的第一个“路径”是转换器,第二个是传入的值。因此,如果将参数命名为 my_path,则应编写 @app.route('/<path:my_path>')
。跨度>
以上是关于在 Flask 路由中捕获任意路径的主要内容,如果未能解决你的问题,请参考以下文章