Python jinjaテンプレートでloop.counterを出力する方法は?


167

現在のループ反復をテンプレートに出力できるようにしたい。

ドキュメントによると:http : //wsgiarea.pocoo.org/jinja/docs/loops.html、私が使用しようとしているloop.counter変数があります。

私は以下を持っています:

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

テンプレートには何も出力されていませんが。正しい構文は何ですか?

回答:


374

ループ内のカウンター変数は、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

詳細については、http://jinja.pocoo.org/docs/templates/を参照してください。


166
0ベースのインデックスが必要な場合は、loop.index0代わりに使用できることに言及する価値があります。
ereOn 2013年

まったく驚くべきことは、私が彼らのウェブサイトでこれを見つけることができなかったことです。一方、counterとcounter0は文書化されていますが、昨日インストールしたバージョンにはありません。
njzk2 2014年

42

forループブロック内では、loop.index--but no を含むいくつかの特殊変数にアクセスできますloop.counter公式ドキュメントから:

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

14

あなたがforloop.counter代わりにdjangoを使用している場合loop.counter

<ul>
{% for user in userlist %}
  <li>
      {{ user }} {{forloop.counter}}
  </li>
      {% if forloop.counter == 1 %}
          This is the First user
      {% endif %}
{% endfor %}
</ul>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.