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

如何在Jinja2的被包含模板中更新上下文变量?

Jinja2被包含模板中更新命名空间变量不生效问题

问题场景

尝试在Jinja2的被包含模板中更新命名空间变量,相关代码如下:

base.j2

{% set ns = namespace(indent_lvl = 5) %}
{% filter indent(width=4*ns.indent_lvl, first=True) %}
    base_indent_lvl: {{ns.indent_lvl}}
    {% include template_file with context %}
    base_indent_lvl: {{ns.indent_lvl}}
{% endfilter %}

template_file.j2

{% set ns.indent_lvl= ns.indent_lvl+1 %}
template_indent_lvl: {{ns.indent_lvl}}

执行后发现:进入被包含模板后ns.indent_lvl成功增加到6,但返回base模板后该值又变回5,实际输出如下:

base_indent_lvl: 5
template_indent_lvl: 6
base_indent_lvl: 5

解决方法

单独测试命名空间变量在被包含模板中的修改逻辑是正常的,最终排查出问题根源:代码中ns命名空间的初始赋值位置错误。调整初始赋值位置后,被包含模板对变量的修改即可在父模板中保留。


内容的提问来源于stack exchange,提问作者Tradjincal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 14:54:51