web-dev-qa-db-fra.com

Comment accéder à forloop.counter le plus à l'extérieur avec des boucles imbriquées dans les modèles Django?

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 de boucle le plus à l'intérieur de l'exemple ci-dessus

107
jamesaharvey

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

206
Tom

vous pouvez également utiliser avec

Met en cache une variable complexe sous un nom plus simple. Cela 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 une 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 il y en a beaucoup pour les boucles

11
WeizhongTu