Django - iteriere Nummer in for-Schleife einer Vorlage

250

Ich habe die folgende for-Schleife in meiner Django-Vorlage, in der Tage angezeigt werden. Ich frage mich, ob es möglich ist, eine Zahl (im folgenden Fall i) in einer Schleife zu iterieren. Oder muss ich es in der Datenbank speichern und dann in Form von days.day_number abfragen?

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

Antworten:

593

Django bietet es. Sie können entweder verwenden:

  • {{ forloop.counter }}Index beginnt bei 1 .
  • {{ forloop.counter0 }}Index beginnt bei 0 .

In der Vorlage können Sie Folgendes tun:

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

    # do your stuff
{% endfor %}

Weitere Infos unter: für | Eingebaute Vorlagen-Tags und Filter | Django-Dokumentation

Rohan
quelle
1
Aber es gibt Länge-1.
VIKAS KOHLI
2
Was ist mit verschachtelten for-Schleifen? Wie können wir Django sagen, ob wir die innere oder die äußere Schleife zählen wollen?
Tim Woocker
4
@ crey4fun, überprüfen Sie die forloop.parentloopReferenzdokumente für weitere Informationen.
Rohan
89

Auch kann man dies verwenden:

{% if forloop.first %}

oder

{% if forloop.last %}
JMJ
quelle
10
Nicht die Antwort auf die Frage, aber dennoch die Antwort für viele Menschen, die nach dieser Frage suchen. Gutes Zeug!
Kontur
1

[Django HTML-Vorlage unterstützt derzeit keinen Index], aber Sie können das Ziel erreichen:

Wenn Sie Dictionary in Dictionary in views.py verwenden, ist eine Iteration mit dem Schlüssel als Index möglich. Beispiel:

{% 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 %}

Elseif Sie verwenden Liste innerhalb Wörterbuch dann nicht nur erste und letzte Iteration kann gesteuert werden, aber alle Index gesteuert werden kann. Beispiel:

{% 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 %}

End If;)

// Hope hat die Lösung mit Dictionary, List, HTML-Vorlage, For Loop, Inner Loop und If Else abgedeckt. Django HTML Documentaion für weitere Methoden: https://docs.djangoproject.com/de/2.2/ref/templates/builtins/

Mayur Raj
quelle