Come accedere a forloop.counter più esterno con cicli for annidati nei modelli Django?


118

È possibile accedere al forloop.counter per il ciclo for più esterno nel seguente modello in Django:

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

forloop.counter restituisce il contatore del ciclo for più interno nell'esempio precedente

Risposte:


230

Puoi usarlo forloop.parentloopper arrivare all'esterno forloop, quindi nel tuo caso {{forloop.parentloop.counter}}.


14

puoi anche usare con

Memorizza nella cache una variabile complessa con un nome più semplice. Ciò è utile quando si accede più volte a un metodo "costoso" (ad esempio, che colpisce il database).

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

se usi la versione alta di Django potresti usare

{% with outer_counter = forloop.counter %}

Ho controllato, Django 1.4.x - Django 1.9.x supporta i due metodi.

questo è più chiaro quando si hanno molti cicli for


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.