Comment accéder à forloop.counter le plus externe avec des boucles for imbriquées dans les modèles Django?

118

Est-il possible d'accéder au forloop.counter pour la boucle for la plus externe dans le modèle suivant dans Django:

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

forloop.counter renvoie le compteur le plus interne de la boucle for dans l'exemple ci-dessus

Jamesaharvey
la source

Réponses:

230

Vous pouvez utiliser forloop.parentlooppour accéder à l'extérieur forloop, donc dans votre cas {{forloop.parentloop.counter}}.

À M
la source
14

vous pouvez également utiliser avec

Cache une variable complexe sous un nom plus simple. Ceci est utile lors de l'accès à une méthode «coûteuse» (par exemple, une méthode qui atteint la base de données) plusieurs fois.

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

si vous utilisez la version haute de Django, vous pouvez utiliser

{% with outer_counter = forloop.counter %}

J'ai vérifié, Django 1.4.x - Django 1.9.x supporte les deux méthodes.

c'est plus clair quand on a beaucoup de boucles for

WeizhongTu
la source