2012-08-27 9 views
77

Ich möchte die aktuelle Schleifeniteration zu meiner Vorlage ausgeben können.Wie man loop.counter in python jinja Vorlage ausgibt?

Laut der Dokumentation: http://wsgiarea.pocoo.org/jinja/docs/loops.html gibt es eine loop.counter Variable, die ich versuche zu verwenden.

Ich habe folgendes:

<ul> 
{% for user in userlist %} 
    <li> 
     {{ user }} {{loop.counter}} 
    </li> 
     {% if loop.counter == 1 %} 
      This is the First user 
     {% endif %} 
{% endfor %} 
</ul> 

Obwohl nichts Ausgang meiner Vorlage sein wird. Was ist die korrekte Syntax?

+0

Sie haben zweimal {% für Benutzer in Benutzerliste%} '. Ich gehe davon aus, dass das nicht stimmt. – obmarg

Antwort

176

Die Zählvariable innerhalb der Schleife wird loop.index in jinja2 genannt.

>>> from jinja2 import Template 

>>> s = "{% for element in elements %}{{loop.index}} {% endfor %}" 
>>> Template(s).render(elements=["a", "b", "c", "d"]) 
1 2 3 4 

Weitere Informationen finden Sie unter http://jinja.pocoo.org/docs/templates/.

+68

Erwähnenswert, dass Sie, wenn Sie einen 0-basierten Index haben möchten, stattdessen '' loop.index0'' verwenden können. – ereOn

+0

Was ist total erstaunlich ist, dass der Verweis auf diese ich nicht auf ihrer Website finden konnte, während Counter und counter0 sind dokumentiert, aber nicht in der Version, die ich gestern installiert. – njzk2

6

Innerhalb eines For-Loop-Blocks können Sie auf einige spezielle Variablen zugreifen, einschließlich loop.index - aber keine loop.counter. Von the official docs:

Variable Description 
loop.index The current iteration of the loop. (1 indexed) 
loop.index0 The current iteration of the loop. (0 indexed) 
loop.revindex The number of iterations from the end of the loop (1 indexed) 
loop.revindex0 The number of iterations from the end of the loop (0 indexed) 
loop.first True if first iteration. 
loop.last True if last iteration. 
loop.length The number of items in the sequence. 
loop.cycle A helper function to cycle between a list of sequences. See the explanation below. 
loop.depth Indicates how deep in a recursive loop the rendering currently is. Starts at level 1 
loop.depth0 Indicates how deep in a recursive loop the rendering currently is. Starts at level 0 
loop.previtem The item from the previous iteration of the loop. Undefined during the first iteration. 
loop.nextitem The item from the following iteration of the loop. Undefined during the last iteration. 
loop.changed(*val) True if previously called with a different value (or not called at all). 
+0

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/18242231) – Isma

0

Außerdem können Sie Tag über die Loop-Struktur setzen und Sie werden Ihre Zähler erhalten.

<ol> 
    {% for i in users %} 
     <li>ITEM</li> 
    {% endfor%} 
    </ol> 
Verwandte Themen