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

Jinja中Namespace定义变量是否有数量限制?报错求解

Jinja Namespace变量报错问题解决

你尝试用Jinja的Namespace实现循环外变量复用,但运行代码时出现UndefinedError: 'jinja2.utils.Namespace object' has no attribute 'count'错误,代码示例如下:

{% set det = namespace(abbr='') %}
{% set det = namespace(DATE='01-01-2021') %}
{% set det = namespace(BA=0) %}
{% set det = namespace(BO=0) %}
{% set det = namespace(CO=0) %}
{% set det = namespace(CR=0) %}
{% set det = namespace(CRAW=0) %}
{% set det = namespace(PH=0) %}
{% set det = namespace(CE=0) %}
{% set det = namespace(CEAW=0) %}
{% set det = namespace(SL=0) %}
{% set det = namespace(RL=0) %}
{% set det = namespace(CPFE=0) %}
{% set det = namespace(CPFR=0) %}
{% set det = namespace(CPFT=0) %}
{% set det = namespace(TP=0) %}
{% set det = namespace(NS=0) %}
{% set det = namespace(count=0) %}
{% set det = namespace(TA=0) %}
{% set det.count = det.count + 1 %}

错误信息:

self.environment.handle_exception()
File "env/lib/python3.8/site-packages/jinja2/environment.py", line 925, in handle_exception
raise rewrite_traceback_stack(source=source)
File "", line 23, in top-level template code
jinja2.exceptions.UndefinedError: 'jinja2.utils.Namespace object' has no attribute 'count'

错误原因

你每次调用{% set det = namespace(...) %}都会重新创建一个全新的Namespace对象,并覆盖之前的det变量。最后一次执行{% set det = namespace(TA=0) %}后,det只包含TA这一个属性,之前定义的count等属性都被覆盖丢失了,所以后续访问det.count会报错。这和Namespace下变量数量无关。

解决方法

只需要创建一次Namespace对象,之后通过赋值的方式添加或修改属性即可:

方式1:初始化时一次性定义所有属性

{% set det = namespace(
    abbr='',
    DATE='01-01-2021',
    BA=0,
    BO=0,
    CO=0,
    CR=0,
    CRAW=0,
    PH=0,
    CE=0,
    CEAW=0,
    SL=0,
    RL=0,
    CPFE=0,
    CPFR=0,
    CPFT=0,
    TP=0,
    NS=0,
    count=0,
    TA=0
) %}
{% set det.count = det.count + 1 %}

方式2:先创建空/基础Namespace,再逐个添加属性

{% set det = namespace() %}
{% set det.abbr = '' %}
{% set det.DATE = '01-01-2021' %}
{% set det.BA = 0 %}
{% set det.BO = 0 %}
{% set det.CO = 0 %}
{% set det.CR = 0 %}
{% set det.CRAW = 0 %}
{% set det.PH = 0 %}
{% set det.CE = 0 %}
{% set det.CEAW = 0 %}
{% set det.SL = 0 %}
{% set det.RL = 0 %}
{% set det.CPFE = 0 %}
{% set det.CPFR = 0 %}
{% set det.CPFT = 0 %}
{% set det.TP = 0 %}
{% set det.NS = 0 %}
{% set det.count = 0 %}
{% set det.TA = 0 %}
{% set det.count = det.count + 1 %}

Namespace变量数量限制

Jinja官方没有对Namespace对象的属性数量做限制,只要你的系统内存足够容纳这些变量,就可以正常使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:20:20