วิธีการส่งออก loop.counter ใน python jinja แม่แบบ


169

ฉันต้องการที่จะสามารถส่งออกวนซ้ำปัจจุบันในแม่แบบของฉัน

ตามเอกสาร: 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>

แม้ว่าจะไม่มีการส่งออกไปยังแม่แบบของฉัน ไวยากรณ์ที่ถูกต้องคืออะไร?

คำตอบ:


376

ตัวแปรตัวนับภายในลูปเรียกว่าloop.indexใน jinja2

>>> 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/สำหรับข้อมูลเพิ่มเติม


167
เป็นมูลค่าการกล่าวขวัญว่าถ้าคุณต้องการดัชนีที่ใช้ 0 คุณสามารถใช้loop.index0แทน
ereOn

สิ่งที่น่าอัศจรรย์อย่างยิ่งคือการอ้างอิงถึงสิ่งนี้ที่ฉันไม่สามารถหาได้ในเว็บไซต์ของพวกเขาในขณะที่ตัวนับและตัวนับ 0 ถูกบันทึกไว้ แต่ไม่ปรากฏในเวอร์ชันที่ฉันติดตั้งเมื่อวานนี้
njzk2

42

ภายในของบล็อกห่วงคุณสามารถเข้าถึงบางตัวแปรพิเศษรวมทั้งloop.index--but 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).

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.