Flask Jinja2中如何使用url_for生成含多个斜杠的路由URL
Jinja2模板中
url_for生成多层斜杠路径的实现方法 url_for是根据后端注册的路由规则生成对应地址的,要输出带多个斜杠的多层级URL,只要先把后端路由配置正确即可,分两种常见场景处理:
- 动态多段路径场景
路由默认的字符串转换器不会匹配斜杠,你需要换成专门支持斜杠识别的path类型转换器定义路由。以Flask框架为例,后端路由写法:
模板里调用# 用path类型接收带斜杠的多段路径参数 @app.route('/image/<path:resource_path>') def image(resource_path): # 写对应业务逻辑即可,当resource_path值为"png/large"时,匹配的就是/image/png/large路径 return target_resourceurl_for时,把多段路径作为参数传给路由定义的形参就行:
渲染后输出的地址就是你需要的{{ url_for('image', resource_path='png/large') }}/image/png/large格式。 - 固定多段路径场景
如果目标多层地址是固定不变的,直接在定义路由的时候写全完整路径,给对应处理函数设置独立端点名即可:
模板里直接传入对应端点名称调用:# 定义路由时直接写全多层路径 @app.route('/image/png/large') def large_png_image(): # 写该路径对应的业务逻辑 return large_png_resource
渲染后直接输出固定的多层级目标地址。{{ url_for('large_png_image') }}
踩坑提醒:别用默认的
<string:xxx>转换器接收带斜杠的路径参数,它的匹配规则是碰到斜杠就截断,传多段路径会直接触发404路由匹配错误,必须用<path:xxx>转换器才能正确识别包含斜杠的参数内容。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

