Jak uzyskać dostęp do najbardziej zewnętrznego forloop.counter z zagnieżdżonymi pętlami for w szablonach Django?

118

Czy jest możliwy dostęp do forloop.counter dla najbardziej zewnętrznej pętli for w następującym szablonie w Django:

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

forloop.counter zwraca najbardziej wewnętrzny licznik pętli for w powyższym przykładzie

jamesaharvey
źródło

Odpowiedzi:

230

Możesz użyć, forloop.parentloopaby dostać się na zewnątrz forloop, więc w twoim przypadku {{forloop.parentloop.counter}}.

Tomek
źródło
14

możesz również używać z

Buforuje zmienną złożoną pod prostszą nazwą. Jest to przydatne w przypadku wielokrotnego uzyskiwania dostępu do „kosztownej” metody (np. Takiej, która trafia do bazy danych).

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

jeśli używasz wysokiej wersji Django, możesz użyć

{% with outer_counter = forloop.counter %}

Sprawdziłem, Django 1.4.x - Django 1.9.x obsługuje dwie metody.

jest to wyraźniejsze, gdy mamy wiele pętli for

WeizhongTu
źródło