Django - iteruj liczbę w pętli for szablonu

250

W moim szablonie django wyświetlam następujące informacje dotyczące pętli. Zastanawiam się, czy można iterować liczbę (w poniższym przypadku i) w pętli. Czy też muszę zapisać go w bazie danych, a następnie wysłać zapytanie w formie dni. Numer_dni?

{% for days in days_list %}
    <h2># Day {{ i }} - From {{ days.from_location }} to {{ days.to_location }}</h2>
{% endfor %}
orschiro
źródło

Odpowiedzi:

592

Django to zapewnia. Możesz użyć:

  • {{ forloop.counter }}indeks zaczyna się od 1 .
  • {{ forloop.counter0 }}indeks zaczyna się od 0 .

W szablonie możesz wykonać:

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

    # do your stuff
{% endfor %}

Więcej informacji na: for | Wbudowane tagi szablonów i filtry | Dokumentacja Django

Rohan
źródło
1
Ale daje długość-1.
VIKAS KOHLI
2
Co z zagnieżdżonymi pętlami? Jak możemy powiedzieć django, jeśli chcemy policzyć pętlę wewnętrzną lub zewnętrzną?
Tim Woocker
4
@ crey4fun, sprawdź forloop.parentloopdokumenty odsyłające, aby uzyskać więcej informacji.
Rohan
89

Można również użyć tego:

{% if forloop.first %}

lub

{% if forloop.last %}
JMJ
źródło
10
Nie odpowiedź na pytanie, ale wciąż odpowiedź dla wielu osób, które będą szukać tego pytania. Dobry towar!
kontur
1

[Szablon Django HTML nie obsługuje obecnie indeksu], ale możesz osiągnąć cel:

Jeśli używasz Dictionary wewnątrz Dictionary w views.py, iteracja jest możliwa przy użyciu klucza jako indeksu. przykład:

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

Jeśli użyjesz List wewnątrz słownika, nie tylko pierwsza i ostatnia iteracja mogą być kontrolowane, ale cały indeks może być kontrolowany. przykład:

{% 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;)

// Nadzieja objęła rozwiązanie słownikiem, listą, szablonem HTML, dla pętli, pętli wewnętrznej, jeśli jeszcze. Dokumentacja Django HTML dla innych metod: https://docs.djangoproject.com/en/2.2/ref/templates/builtins/

Mayur Raj
źródło