Django - bir şablonun döngüsü için yineleme sayısı


250

Ben gün gösteren django şablonumda döngü için aşağıdaki var. Bir döngüde bir sayı (aşağıdaki durumda i) yinelemenin mümkün olup olmadığını merak ediyorum. Yoksa veritabanında depolamak ve gün.gün_sayısı şeklinde sorgulamak zorunda mıyım?

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

Yanıtlar:


594

Django bunu sağlar. Şunlardan birini kullanabilirsiniz:

  • {{ forloop.counter }}indeks 1'den başlar .
  • {{ forloop.counter0 }}dizin 0'dan başlar .

Şablonda şunları yapabilirsiniz:

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

    # do your stuff
{% endfor %}

Daha fazla bilgi için: for | Yerleşik şablon etiketleri ve filtreleri | Django belgeleri


1
Ama uzunluk-1 verir.
VIKAS KOHLI

2
Döngüler için iç içe ne olacak? Django'ya iç döngüyü mi yoksa dış halkayı mı saymak istediğimizi nasıl söyleyebiliriz?
Tim Woocker

4
@ crey4fun, forloop.parentloopdaha fazla bilgi için başvuru belgelerine bakın.
Rohan

91

Ayrıca bunu kullanabilirsiniz:

{% if forloop.first %}

veya

{% if forloop.last %}

10
Sorunun cevabı değil, yine de bu soruyu arayacak birçok insanın cevabı. İyi şeyler!
kontur

1

[Django HTML şablonu şu an için dizini desteklemiyor], ancak hedefe ulaşabilirsiniz:

Eğer kullanırsanız Sözlük views.py içinde Sözlük içerisindeki sonra yineleme endeks olarak anahtar kullanılarak mümkündür. misal:

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

Kullanmak elseif listesi Sözlük sonra sadece ilk ve son yineleme iç kontrol edilebilir, ancak tüm indeks kontrol edilebilir. misal:

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

// Umarım çözümü Sözlük, Liste, HTML şablonu, Döngü için, İç döngü, Else ise kapsamıştır. Daha fazla yöntem için Django HTML Belgeleri: https://docs.djangoproject.com/en/2.2/ref/templates/builtins/

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.