Flask中使用url_for生成带查询参数的正确链接问题
Flask url_for生成查询参数链接并正确获取参数
问题分析
核心矛盾在于:
- 路由用路径参数(
<driver_id>)时,url_for会把参数嵌入URL路径,生成/report/drivers/SVF格式的链接,不符合查询参数的需求; - 路由改为无参数的
/report/drivers/时,url_for能生成正确的?driver_id=SVF查询参数链接,但函数因未正确获取参数而失效。
解决方案
只需修改Python路由函数,通过request.args获取查询参数,而非将参数定义为路由路径变量,即可同时满足链接格式要求和函数正常工作:
修改后的Python路由函数
from flask import request # 需导入request模块 @app.route("/report/drivers/") def driver_links(): # 从URL查询参数中提取driver_id driver_id = request.args.get('driver_id') context = { "report": sort_asc_desc('data', 'asc'), "test": driver_id } return render_template('driver_id.html', **context)
HTML模板保持不变
<a href="{{ url_for('driver_links', driver_id=key[0]) }}">{{key[0]}}</a>
原理说明
url_for('driver_links', driver_id=key[0])会自动将driver_id作为查询参数拼接到URL末尾,生成http://127.0.0.1:5000/report/drivers/?driver_id=SVF格式的链接;request.args.get('driver_id')负责从URL的查询参数中读取driver_id的值,确保函数能正常获取并使用该参数。
内容的提问来源于stack exchange,提问作者Vladimir Kharchenko
相关产品推荐
相关产品推荐

