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

Jinja&Django模板报错:无效块标签'set',变量递增失败

解决Django模板中{% set %}标签报错的问题

你这是踩了Django模板语言和Jinja2的语法差异坑啦!报错提示的"Invalid block tag : 'set'",核心原因是Django默认的模板引擎根本不支持{% set %}这个标签——它是Jinja2专属的语法,和你有没有安装Jinja完全没关系,之前代码正常只是因为没用到这个Jinja特有的标签而已。

给你两个实用的解决方案,按需选择:

方案一:用Django原生循环计数(最省心)

既然你是要在for循环里实现递增计数,完全不用手动设置变量!Django的for循环自带forloop.counter属性,它会从1开始自动递增,正好匹配你的需求。

把模板代码改成这样就行:

{% for form in formset %}
<tr style="border:1px solid black;" id="{{ form.prefix }}-row" class="dynamic-form">
    <td><div class="col-xs-1"><b><p name="np1">{{ forloop.counter }}</p></b></div></td>
    <!-- 你的其他表单内容 -->
</tr>
{% endfor %}

直接删掉{% set count = 1 %},把原来的{{ count }}换成{{ forloop.counter }},不用改任何配置,完美解决计数问题。

方案二:配置Django使用Jinja2模板引擎

如果你确实需要用Jinja2的灵活语法(比如更自由的变量操作),可以在Django里配置双模板引擎:

  1. 修改项目根目录的settings.py,更新TEMPLATES配置,添加Jinja2的引擎项:
import os
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

TEMPLATES = [
    # Jinja2模板引擎配置
    {
        'BACKEND': 'django.template.backends.jinja2.Jinja2',
        'DIRS': [os.path.join(BASE_DIR, 'templates/jinja2')],  # 存放Jinja模板的目录
        'APP_DIRS': True,
        'OPTIONS': {
            # 可选:自定义Jinja环境,比如添加全局变量/过滤器
            # 'environment': 'your_project_name.jinja2.environment',
        },
    },
    # 保留默认Django模板引擎,处理admin等原生模板
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
  1. 把用到{% set %}的模板文件放到templates/jinja2目录下,Django就会自动用Jinja2引擎解析它了。

额外小提示

如果只是需要在Django原生模板里临时定义一个只读变量,可以用{% with %}标签,比如:

{% with count=1 %}
    <p>初始值:{{ count }}</p>
{% endwith %}

但这个变量无法修改,所以循环递增的场景还是forloop.counter最靠谱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:24:22