You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 13:45:04