Wie wird loop.counter in einer Python-Jinja-Vorlage ausgegeben?

167

Ich möchte in der Lage sein, die aktuelle Schleifeniteration in meine Vorlage auszugeben.

Laut den Dokumenten: http://wsgiarea.pocoo.org/jinja/docs/loops.html gibt es eine loop.counter-Variable, die ich verwenden möchte.

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 in meine Vorlage ausgegeben wird. Was ist die richtige Syntax?

Rolando
quelle

Antworten:

372

Die Zählervariable innerhalb der Schleife heißt in jinja2 loop.index.

>>> 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/ .

Sigi
quelle
165
Erwähnenswert ist, dass Sie loop.index0stattdessen einen 0-basierten Index verwenden können .
Am
Was total erstaunlich ist, ist, dass der Verweis darauf auf ihrer Website nicht gefunden werden konnte, während counter und counter0 dokumentiert sind, aber in der Version, die ich gestern installiert habe, nicht vorhanden sind.
NJZK2
42

Innerhalb eines for-loop-Blocks können Sie auf einige spezielle Variablen zugreifen, einschließlich loop.index--but no loop.counter. Aus den offiziellen Dokumenten :

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).
tozCSS
quelle
14

Wenn Sie Django verwenden, verwenden Sie forloop.counteranstelle vonloop.counter

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