Jinja模板无法使用loop.index时,自定义索引与取模运算问题
排查解决Jinja循环中自定义变量i不生效的问题
原代码存在三个核心问题,逐一修正即可解决:
变量初始化语法错误
原代码用{{Set i=1}}定义变量是错误的:- Jinja中设置变量必须用
{% %}标签,而非输出用的{{ }} - 关键字
set需要小写,不能大写成Set
正确写法:{% set i=1 %}
- Jinja中设置变量必须用
变量名大小写不匹配
Jinja变量名严格区分大小写,原代码判断条件里的I和定义的变量i不一致,必须统一成小写i,即{% if i % 2 == 0 %}循环作用域限制
Jinja的for循环会创建局部作用域,直接在循环内用{% set i=i+1 %}无法修改外部的i变量,需要通过namespace对象来维护跨作用域的变量。
修正后的完整代码
{% set ns = namespace(i=1) %} {% for item in items %} {% if ns.i % 2 == 0 %} Print("hello") {% endif %} {% set ns.i = ns.i + 1 %} {% endfor %}
解释:通过namespace对象包裹变量i,循环内修改ns.i时会直接更新该对象的属性,不受循环局部作用域的限制,这样就能实现自定义计数并结合取模判断的需求。
内容的提问来源于stack exchange,提问作者Abhishek Kadavala
相关产品推荐
相关产品推荐

