¿Cómo acceder al forloop.counter más externo con bucles for anidados en las plantillas de Django?

118

¿Es posible acceder a forloop.counter para el bucle for más externo en la siguiente plantilla en Django:

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

forloop.counter devuelve el contador del bucle for más interno en el ejemplo anterior

jamesaharvey
fuente

Respuestas:

230

Puedes usar forloop.parentlooppara llegar al exterior forloop, así que en tu caso {{forloop.parentloop.counter}}.

Tom
fuente
14

también puedes usar con

Almacena en caché una variable compleja con un nombre más simple. Esto es útil cuando se accede a un método "caro" (por ejemplo, uno que llega a la base de datos) varias veces.

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

si usa la versión alta de Django, podría usar

{% with outer_counter = forloop.counter %}

Lo he comprobado, Django 1.4.x - Django 1.9.x admite los dos métodos.

esto es más claro cuando hay muchos bucles for

WeizhongTu
fuente