如何在Jinja模板中通过变量名获取Flask make_response传入的变量值?
在Jinja模板中获取变量的规范方法(替代底层resolve用法)
核心说明
Flask的make_response并不负责向Jinja模板传递变量,模板变量的标准传递渠道是render_template(或render_template_string)的关键字参数。你之前用的self._TemplateReference__context.resolve()属于Jinja的私有内部API,依赖底层实现,版本迭代时极易失效,完全不推荐使用。
规范实现方式
1. 直接在渲染模板时传入变量(最常用)
在视图函数中,通过render_template的关键字参数传递变量,模板中直接使用变量名即可:
视图函数代码:
from flask import Flask, render_template, make_response app = Flask(__name__) @app.route('/demo') def demo(): # 把需要的变量作为关键字参数传入render_template return make_response(render_template('demo.html', nickname='Charlie', score=90))
模板demo.html代码:
<div>昵称:{{ nickname }}</div> <div>分数:{{ score }}</div>
2. 动态解析变量名场景的规范处理
如果需要根据字符串形式的变量名(比如你代码中的arg_name)动态获取对应值,不要直接操作模板上下文,而是在视图层把变量打包进字典后传入模板,通过字典索引获取:
视图函数代码:
@app.route('/dynamic') def dynamic(): # 所有变量存入字典 template_vars = { 'nickname': 'David', 'score': 85, 'phone': '138xxxx1234' } # 要动态获取的变量名 target_var = 'phone' return make_response(render_template('dynamic.html', vars=template_vars, arg_name=target_var))
模板dynamic.html代码:
{% set value = vars[arg_name] %} <div>动态获取的值:{{ value }}</div>
3. 访问Flask全局上下文变量
如果要获取的是Flask内置的全局变量(如request、session、g),模板中可以直接使用,无需额外传递:
<div>当前请求路径:{{ request.path }}</div> <div>登录用户ID:{{ session.get('user_id') }}</div>
内容的提问来源于stack exchange,提问作者orome
相关产品推荐
相关产品推荐

