我想做类似的事情:
变量p来自test.py,它是一个列表['a','b','c','d']
{% for i in p %}
{{variable++}}
{{variable}}
结果输出是:
1 2 3 4
Answers:
2.10之后,要解决范围问题,您可以执行以下操作:
{% set count = namespace(value=0) %}
{% for i in p %}
{{ count.value }}
{% set count.value = count.value + 1 %}
{% endfor %}
正如Jeroen所说,存在范围界定问题:如果在循环外部设置“计数”,则无法在循环内部进行修改。
您可以通过使用对象而不是“ count”的标量来消除这种行为:
{% set count = [1] %}
现在,您可以在forloop甚至%include%中操纵计数。这是我增加计数的方式(是的,这很麻烦但是很好):
{% if count.append(count.pop() + 1) %}{% endif %} {# increment count by 1 #}
{% set count = [] %}
,在每个循环中将一个项目添加到列表中,{% set __ = index.append(1) %}
并使用长度显示索引index|length
。
{% set count = [ ] %}
,在每个循环中向列表添加一个项目,{% set __ = count.append(1) %}
并使用长度显示计数count|length
这是我的解决方案:
将所有计数器放在字典中:
{% set counter = {
'counter1': 0,
'counter2': 0,
'etc': 0,
} %}
定义一个宏以轻松地增加它们:
{% macro increment(dct, key, inc=1)%}
{% if dct.update({key: dct[key] + inc}) %} {% endif %}
{% endmacro %}
现在,每当您想增加'counter1'计数器时,只需执行以下操作:
{{ increment(counter, 'counter1') }}
我也为这种行为而苦恼。我想根据计数器更改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 %}
搜索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/