Python Flask如何将event对象的id作为参数传递给URL路由
问题原因
当前Jinja2模板中的链接未使用正确的变量渲染语法,event['id']不会被自动替换为实际的id值,会直接作为字符串拼接到URL中,导致后端拿到的参数不正确。
修复方案
前端模板修改
有两种实现方式,更推荐第二种:
- 方案1:补充Jinja2变量渲染标记
将a标签的href属性修改为:<a href="/participate/{{ event['id'] }}" class="btn btn-primary">Participate</a> - 方案2:使用Flask内置的
url_for函数生成链接(避免硬编码路由,可维护性更高)
其中<a href="{{ url_for('participate', id=event['id']) }}" class="btn btn-primary">Participate</a>url_for第一个参数为后端视图函数的函数名,第二个参数对应路由中定义的参数名,后续调整路由路径时不需要同步修改模板代码。
后端可选优化
可以给路由的id参数添加整数类型限定,过滤非法参数,提升安全性:
@app.route("/participate/<int:id>") def participate(id): if session.get("email"): print(id) mail = setupMail() return redirect(url_for("home")) else: return redirect(url_for("login"))
内容的提问来源于stack exchange,提问作者Gsliii
相关产品推荐
相关产品推荐

