Django - nomor iterate untuk loop dari template

250

Saya memiliki berikut ini untuk loop dalam template menampilkan Django saya hari. Saya bertanya-tanya, apakah mungkin untuk mengulang nomor (dalam kasus di bawah ini saya) dalam satu lingkaran. Atau apakah saya harus menyimpannya di database dan kemudian meminta dalam bentuk days.day_number?

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

Jawaban:

594

Django menyediakannya. Anda dapat menggunakan:

  • {{ forloop.counter }}indeks dimulai pada 1 .
  • {{ forloop.counter0 }}indeks dimulai pada 0 .

Dalam templat, Anda dapat melakukan:

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

    # do your stuff
{% endfor %}

Info lebih lanjut di: untuk | Tag dan filter templat bawaan | Dokumentasi Django

Rohan
sumber
1
Tapi itu memberi panjang-1.
VIKAS KOHLI
2
Bagaimana dengan bersarang untuk loop? Bagaimana kita bisa memberi tahu Django jika kita ingin menghitung lingkaran dalam atau luar?
Tim Woocker
4
@ crey4fun, periksa forloop.parentlooprujukan dokumen untuk info lebih lanjut.
Rohan
91

Anda juga dapat menggunakan ini:

{% if forloop.first %}

atau

{% if forloop.last %}
JMJ
sumber
10
Bukan jawaban untuk pertanyaan, tetapi tetap jawaban bagi banyak orang yang akan mencari pertanyaan ini. Barang bagus!
kontur
1

[Template HTML Django tidak mendukung indeks seperti sekarang], tetapi Anda dapat mencapai tujuannya:

Jika Anda menggunakan Kamus di dalam Kamus di views.py maka iterasi dimungkinkan menggunakan kunci sebagai indeks. contoh:

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

Jika Anda menggunakan Daftar di dalam kamus, maka tidak hanya iterasi pertama dan terakhir yang dapat dikontrol, tetapi semua indeks dapat dikontrol. contoh:

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

Berakhir jika ;)

// Harapan telah membahas solusi dengan Kamus, Daftar, templat HTML, Untuk Loop, Loop Dalam, Jika Lain. Django HTML Documentaion untuk metode lainnya: https://docs.djangoproject.com/en/2.2/ref/templates/builtins/

Mayur Raj
sumber