119 votes

Comment incrémenter une variable sur une boucle for dans un modèle jinja ?

Je voudrais faire quelque chose comme :

La variable p provient de test.py qui est une liste ['a', 'b', 'c', 'd'].

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

La sortie du résultat est :
1 2 3 4

2voto

Mischa Points 104

Je luttais contre ce comportement aussi. Je voulais changer la classe de div dans Jinja en fonction du compteur. J'ai été surpris que la méthode pythonique ne fonctionne pas. Le code suivant réinitialisait mon compteur à chaque itération, et je n'avais donc qu'une classe rouge.

{% 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 %}

J'ai utilisé loop.index comme ça et ça marche :

{% 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 %}

2voto

Tuxedo Joe Points 184

Je suis venu chercher la façon dont Django fait cela et j'ai trouvé cet article. Peut-être que quelqu'un d'autre a besoin de la solution de Django qui vient ici.

{% for item in item_list %}
    {{ forloop.counter }} {# starting index 1 #}
    {{ forloop.counter0 }} {# starting index 0 #}

    {# do your stuff #}
{% endfor %}

Plus d'informations ici : https://docs.djangoproject.com/en/1.11/ref/templates/builtins/

3 votes

C'est Django Template Engine, l'OP a demandé jinja2.

1 votes

Merci, ça m'a aidé !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X