Django - répéter le nombre dans la boucle d'un modèle

250

J'ai la boucle for suivante dans mon modèle django affichant les jours. Je me demande s'il est possible d'itérer un nombre (dans le cas ci-dessous i) dans une boucle. Ou dois-je le stocker dans la base de données, puis l'interroger sous la forme days.day_number?

{% for days in days_list %}
    <h2># Day {{ i }} - From {{ days.from_location }} to {{ days.to_location }}</h2>
{% endfor %}
orschiro
la source

Réponses:

594

Django le fournit. Vous pouvez utiliser soit:

  • {{ forloop.counter }}l'index commence à 1 .
  • {{ forloop.counter0 }}l'index commence à 0 .

Dans le modèle, vous pouvez faire:

{% for item in item_list %}
    {{ forloop.counter }} # starting index 1
    {{ forloop.counter0 }} # starting index 0

    # do your stuff
{% endfor %}

Plus d'infos sur: pour | Balises et filtres de modèle intégrés | Documentation Django

Rohan
la source
1
Mais cela donne la longueur-1.
VIKAS KOHLI
2
Qu'en est-il des boucles imbriquées? Comment pouvons-nous dire à django si nous voulons compter la boucle intérieure ou extérieure?
Tim Woocker
4
@ crey4fun, consultez les forloop.parentloopdocuments de référence pour plus d'informations.
Rohan
91

On peut également utiliser ceci:

{% if forloop.first %}

ou

{% if forloop.last %}
JMJ
la source
10
Pas la réponse à la question, mais toujours la réponse pour de nombreuses personnes qui rechercheront cette question. Bon produit!
kontur
1

[Le modèle HTML Django ne prend pas en charge l'index pour l'instant], mais vous pouvez atteindre l'objectif:

Si vous utilisez Dictionary dans Dictionary dans views.py, l'itération est possible en utilisant la clé comme index. exemple:

{% for key, value in DictionartResult.items %} <!-- dictionartResult is a dictionary having key value pair-->
<tr align="center">
    <td  bgcolor="Blue"><a href={{value.ProjectName}}><b>{{value.ProjectName}}</b></a></td>
    <td> {{ value.atIndex0 }} </td>         <!-- atIndex0 is a key which will have its value , you can treat this key as index to resolve-->
    <td> {{ value.atIndex4 }} </td>
    <td> {{ value.atIndex2 }} </td>
</tr>
{% endfor %}

Sinon, si vous utilisez Liste dans le dictionnaire, non seulement la première et la dernière itération peuvent être contrôlées, mais tous les index peuvent être contrôlés. exemple:

{% for key, value in DictionaryResult.items %}
    <tr align="center">
    {% for project_data in value %}
        {% if  forloop.counter <= 13 %}  <!-- Here you can control the iteration-->
            {% if forloop.first %}
                <td bgcolor="Blue"><a href={{project_data}}><b> {{ project_data }} </b></a></td> <!-- it will always refer to project_data[0]-->
            {% else %}
                <td> {{ project_data }} </td> <!-- it will refer to all items in project_data[] except at index [0]-->
            {% endif %}
            {% endif %}
    {% endfor %}
    </tr>
{% endfor %}

Fin si ;)

// Hope a couvert la solution avec Dictionary, List, HTML template, For Loop, Inner loop, If Else. Django HTML Documentaion pour plus de méthodes: https://docs.djangoproject.com/en/2.2/ref/templates/builtins/

Mayur Raj
la source