我想做点什么:
变量p来自test.py,它是一个列表['a','b','c','d']
{% for i in p %}
{{variable++}}
{{variable}}
结果输出是: 1 2 3 4
答案 0 :(得分:117)
您可以使用loop.index
:
{% for i in p %}
{{ loop.index }}
{% endfor %}
检查template designer documentation。
在更新的版本中,由于范围规则,以下不工作:
{% set count = 1 %}
{% for i in p %}
{{ count }}
{% set count = count + 1 %}
{% endfor %}
答案 1 :(得分:47)
正如Jeroen所说,存在一些范围问题:如果你设置了'计数'在循环之外,你不能在循环内修改它。
你可以通过使用一个对象而不是标量来击败这种行为来计算':
{% set count = [1] %}
您现在可以操纵forloop内的计数甚至%include%。以下是我增加计数的方法(是的,它的kludgy但很好):
{% if count.append(count.pop() + 1) %}{% endif %} {# increment count by 1 #}
答案 2 :(得分:21)
在2.10之后,为了解决范围问题,你可以这样做:
{% set count = namespace(a=0) %}
{% for i in p %}
{{ count.a }}
{% set count.a = count.a + 1 %}
{% endfor %}
答案 3 :(得分:1)
在搜索Django的方式时发现了这篇文章。也许其他人需要来到这里的django解决方案。
{% for item in item_list %}
{{ forloop.counter }} {# starting index 1 #}
{{ forloop.counter0 }} {# starting index 0 #}
{# do your stuff #}
{% endfor %}
在这里阅读更多内容: https://docs.djangoproject.com/en/1.11/ref/templates/builtins/
答案 4 :(得分:1)
我也对这种行为感到困惑。我想基于柜台改变jinja中的div类。我惊讶于pythonic方式不起作用。以下代码在每次迭代时重置了我的计数器,所以我只有红色类。
{% if sloupec3: %}
{% set counter = 1 %}
{% for row in sloupec3: %}
{% if counter == 3 %}
{% set counter = 1 %}
{% endif %}
{% if counter == 1: %}
<div class="red"> some red div </div>
{% endif %}
{% if counter == 2: %}
<div class="gray"> some gray div </div>
{% endif %}
{% set counter = counter + 1 %}
{% endfor %}
{% endif %}
我像这样使用loop.index并且它可以工作:
{% if sloupec3: %}
{% for row in sloupec3: %}
{% if loop.index % 2 == 1: %}
<div class="red"> some red div </div>
{% endif %}
{% if loop.index % 2 == 0: %}
<div class="gray"> some gray div </div>
{% endif %}
{% endfor %}
{% endif %}
答案 5 :(得分:1)
如果有人想在循环内添加一个值,那么您可以使用此值100%工作
{% set ftotal= {'total': 0} %}
{%- for pe in payment_entry -%}
{% if ftotal.update({'total': ftotal.total + 5}) %}{% endif %}
{%- endfor -%}
{{ftotal.total}}
输出= 5