如何在jinja模板中为for循环增加变量?

时间:2011-09-24 06:31:27

标签: python jinja2

我想做点什么:

变量p来自test.py,它是一个列表['a','b','c','d']

{% for i in p %}
{{variable++}}
{{variable}}

结果输出是: 1 2 3 4

6 个答案:

答案 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