Как получить доступ к самому внешнему forloop.counter с вложенными циклами for в шаблонах Django?

118

Можно ли получить доступ к forloop.counter для самого внешнего цикла for в следующем шаблоне Django:

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

forloop.counter возвращает самый внутренний счетчик цикла for в приведенном выше примере

jamesaharvey
источник

Ответы:

230

Можно использовать forloop.parentloopдля выхода на внешний forloop, так в вашем случае {{forloop.parentloop.counter}}.

Том
источник
14

вы также можете использовать с

Кеширует сложную переменную под более простым именем. Это полезно при многократном обращении к «дорогостоящему» методу (например, тот, который попадает в базу данных).

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

если вы используете высокую версию Django, вы можете использовать

{% with outer_counter = forloop.counter %}

Я проверил, Django 1.4.x - Django 1.9.x поддерживают два метода.

это более понятно, когда у вас много циклов for

WeizhongTu
источник