我想做的事情如下:
变量p来自test.py,它是一个列表['a','b','c','d']
{% for i in p %}
{{variable++}}
{{variable}}
Run Code Online (Sandbox Code Playgroud)
结果输出为:1 2 3 4
zee*_*kay 129
您可以使用loop.index递增计数器:
{% for i in p %}
{{ loop.index }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
或者您可以使用loop.index:
{% set count = 1 %}
{% for i in p %}
{{ count }}
{% set count = count + 1 %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
检查模板设计器文档.
Pet*_*rth 50
正如Jeroen所说,存在范围问题:如果在循环外设置'count',则无法在循环内修改它.
你可以通过使用对象而不是'count'的标量来打败这种行为:
{% set count = [1] %}
Run Code Online (Sandbox Code Playgroud)
您现在可以在forloop内部操作count,甚至可以操作%include%.这是我如何增加计数(是的,它是kludgy但很好):
{% if count.append(count.pop() + 1) %}{% endif %} {# increment count by 1 #}
Run Code Online (Sandbox Code Playgroud)
Pat*_*ira 27
在2.10之后,为了解决范围问题,你可以这样做:
{% set count = namespace(value=0) %}
{% for i in p %}
{{ count.value }}
{% set count.value = count.value + 1 %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
Jah*_*hid 13
这是我的解决方案:
将所有计数器放在字典中:
{% set counter = {
'counter1': 0,
'counter2': 0,
'etc': 0,
} %}
Run Code Online (Sandbox Code Playgroud)
定义一个宏来轻松增加它们:
{% macro increment(dct, key, inc=1)%}
{% if dct.update({key: dct[key] + inc}) %} {% endif %}
{% endmacro %}
Run Code Online (Sandbox Code Playgroud)
现在,只要你想增加'counter1'计数器,就这样做:
{{ increment(counter, 'counter1') }}
Run Code Online (Sandbox Code Playgroud)
小智 5
如果有人想在循环内添加一个值那么你可以使用它它的工作 100%
{% set ftotal= {'total': 0} %}
{%- for pe in payment_entry -%}
{% if ftotal.update({'total': ftotal.total + 5}) %}{% endif %}
{%- endfor -%}
{{ftotal.total}}
Run Code Online (Sandbox Code Playgroud)
输出 = 5