Django - iterate number in for loop of a template

Solution 1:

Django provides it. You can use either:

  • {{ forloop.counter }} index starts at 1.
  • {{ forloop.counter0 }} index starts at 0.

In template, you can do:

{% for item in item_list %}
    {{ forloop.counter }} # starting index 1
    {{ forloop.counter0 }} # starting index 0

    # do your stuff
{% endfor %}

More info at: for | Built-in template tags and filters | Django documentation

Solution 2:

Also one can use this:

{% if forloop.first %}

or

{% if forloop.last %}

Solution 3:

{% for days in days_list %}
    <h2># Day {{ forloop.counter }} - From {{ days.from_location }} to {{ days.to_location }}</h2>
{% endfor %}

or if you want to start from 0

{% for days in days_list %}
        <h2># Day {{ forloop.counter0 }} - From {{ days.from_location }} to {{ days.to_location }}</h2>
{% endfor %}

Solution 4:

from the docs https://docs.djangoproject.com/en/stable/ref/templates/builtins/#for you can found it to count items you can use a counter like this

{% for job in jobs %}
<td>{{ forloop.counter }}</td>
<td>{{ job.title }}</td>
<td>{{ job.job_url }}</td>
{% endfor %}
  • {{ forloop.counter }} start counting from 1
  • {{ forloop.counter0 }} start counting from 0