web-dev-qa-db-fra.com

Django - itérer le numéro dans la boucle d'un modèle

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 %}
208
orschiro

Django le fournit. Vous pouvez utiliser soit:

  • {{ forloop.counter }} index commence à 1 .
  • {{ forloop.counter0 }} 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'informations sur: pour | balises et filtres de modèles intégrés | Django documentation

482
Rohan

On peut aussi utiliser ceci:

{% if forloop.first %}

ou

{% if forloop.last %}
62
JMJ

[Le modèle HTML de Django ne supporte pas les index pour le moment], mais vous pouvez atteindre l'objectif:

Si vous utilisez Dictionnaire dans Dictionnaire dans views.py, une 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 la liste dans le dictionnaire, alors non seulement la première et la dernière itérations 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 Dictionnaire, Liste, Modèle HTML, Boucle For, Boucle intérieure, Si ce n'est pas le cas. Django HTML Documentaion pour plus de méthodes: https://docs.djangoproject.com/en/2.2/ref/templates/builtins/

0
Mayur Raj