How to access outermost forloop.counter with nested for loops in Django templates?

DjangoDjango Templates

Django Problem Overview


Is it possible to access the forloop.counter for the outermost for loop in the following template in Django:

{% for outerItem in outerItems %}
    {% for item in items%}
        <div>{{ forloop.counter }}.&nbsp;{{ item }}</div>
    {% endfor %}
{% endfor %}

forloop.counter returns the innermost for loop's counter in the above example

Django Solutions


Solution 1 - Django

You can use forloop.parentloop to get to the outer forloop, so in your case {{forloop.parentloop.counter}}.

Solution 2 - Django

you can also use with

Caches a complex variable under a simpler name. This is useful when accessing an “expensive” method (e.g., one that hits the database) multiple times.

{% for outerItem in outerItems %}
  {% with forloop.counter as outer_counter %}
    {% for item in items%}
        <div>{{ outer_counter }}.&nbsp;{{ item }}</div>
    {% endfor %}
  {% endwith %}
{% endfor %}

if using high version of Django you could use

{% with outer_counter=forloop.counter %}

Note: With doesn't allow spaces before or after =

I've checked, Django 1.4.x - Django 1.9.x support the two methods.

this is more clear when have many for loops

Solution 3 - Django

In some cases the forloop.parentloop is not enough.

Check out django-templateaddons3 and its {% counter %} tag for a full-fledged solution.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionjamesaharveyView Question on Stackoverflow
Solution 1 - DjangoTomView Answer on Stackoverflow
Solution 2 - DjangoWeizhongTuView Answer on Stackoverflow
Solution 3 - DjangoAndyTheEntityView Answer on Stackoverflow