The Python Oracle

How to output loop.counter in python jinja template?

--------------------------------------------------
Hire the world's top talent on demand or became one of them at Toptal: https://topt.al/25cXVn
and get $2,000 discount on your first invoice
--------------------------------------------------

Music by Eric Matyas
https://www.soundimage.org
Track title: Underwater World

--

Chapters
00:00 How To Output Loop.Counter In Python Jinja Template?
00:26 Accepted Answer Score 592
00:59 Answer 2 Score 130
01:21 Answer 3 Score 36
01:36 Answer 4 Score 0
01:52 Thank you

--

Full question
https://stackoverflow.com/questions/1214...

--

Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...

--

Tags
#python #jinja2 #templatingengine

#avk47



ACCEPTED ANSWER

Score 592


The counter variable inside the loop is called loop.index in 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

In addition to loop.index, there is also




ANSWER 2

Score 130


Inside of a for-loop block, you can access some special variables, such as loop.index (but not loop.counter). From 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.
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).



ANSWER 3

Score 36


If you are using Django, use forloop.counter instead of loop.counter:

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



ANSWER 4

Score 0


Real-life example:

{% for image in item['images'] %}
    {% set image_id = item_id ~ '-preview-' ~ loop.index0 %}
    <div id="{{ image_id }}" class="overlay">
        <a class="cancel" href="#{{ item_id }}"></a>
        <div class="popup">
            {% set src = image if image.startswith('http') else '/static/images/store/' ~ item_id ~ '/' ~ image %}
            <a href="{{ src }}"><img class="modal-img" src="{{ src }}"/></a>
        </div>
    </div>
{% endfor %}