Como acessar forloop.counter externo com loops for aninhados em modelos do Django?

118

É possível acessar o forloop.counter para o loop for mais externo no seguinte modelo no Django:

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

forloop.counter retorna o contador interno do loop for no exemplo acima

Jamesaharvey
fonte

Respostas:

230

Você pode usar forloop.parentlooppara chegar ao exterior forloop, no seu caso {{forloop.parentloop.counter}}.

Tom
fonte
14

você também pode usar com

Armazena em cache uma variável complexa com um nome mais simples. Isso é útil ao acessar um método “caro” (por exemplo, um que acessa o banco de dados) várias vezes.

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

se estiver usando uma versão alta do Django, você pode usar

{% with outer_counter = forloop.counter %}

Eu verifiquei, Django 1.4.x - Django 1.9.x suporta os dois métodos.

isso fica mais claro quando há muitos loops for

WeizhongTu
fonte