【发布时间】:2011-11-24 03:29:07
【问题描述】:
我想做这样的事情:
变量 p 来自 test.py,它是一个列表 ['a','b','c','d']
{% for i in p %}
{{variable++}}
{{variable}}
结果输出为:
1 2 3 4
【问题讨论】:
我想做这样的事情:
变量 p 来自 test.py,它是一个列表 ['a','b','c','d']
{% for i in p %}
{{variable++}}
{{variable}}
结果输出为:
1 2 3 4
【问题讨论】:
你可以使用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 %}
【讨论】:
正如 Jeroen 所说,存在范围问题:如果您在循环外设置“计数”,则无法在循环内对其进行修改。
您可以通过使用对象而不是 'count' 的标量来消除这种行为:
{% set count = [1] %}
您现在可以在 forloop 甚至 %include% 中操作计数。以下是我增加计数的方法(是的,这很笨拙,但很好):
{% if count.append(count.pop() + 1) %}{% endif %} {# increment count by 1 #}
{% set count = [] %}
{% for something-that-loops %}
{% set __ = count.append(1) %}
<div> Lorem ipsum meepzip dolor...
{{ count|length }}
</div>
{% endfor %}
(来自 @eyettea 和 @PYB 的 cmets)
【讨论】:
{% set count = [] %},在每个循环中向列表中添加一个项目{% set __ = index.append(1) %},并使用长度来显示索引index|length。
{% set count = [ ] %},在每个循环中添加一个项目到列表 {% set __ = count.append(1) %} 并使用长度显示计数count|length
来搜索 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/
【讨论】:
这是我的解决方案:
将所有计数器放入字典中:
{% 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 %}
【讨论】:
2.10之后,为了解决范围问题,可以这样做:
{% set count = namespace(value=0) %}
{% for i in p %}
{{ count.value }}
{% set count.value = count.value + 1 %}
{% endfor %}
【讨论】:
如果有人想在循环中添加一个值,那么你可以使用它 100% 工作
{% set ftotal= {'total': 0} %}
{%- for pe in payment_entry -%}
{% if ftotal.update({'total': ftotal.total + 5}) %}{% endif %}
{%- endfor -%}
{{ftotal.total}}
输出 = 5
【讨论】: