Bagaimana saya bisa memeriksa ukuran koleksi di dalam template Django?

147

Saya punya daftar di template Django saya. Saya ingin melakukan sesuatu hanya jika ukuran daftar lebih besar dari nol.

Saya sudah mencoba myList|lengthdan myList|length_istetapi mereka belum berhasil.

Saya telah mencari di seluruh dan tidak melihat contoh. Bagaimana saya bisa memeriksanya?

MrDatabase
sumber

Jawaban:

279

Lihat https://docs.djangoproject.com/en/stable/ref/templates/builtins/#if : cukup gunakan, untuk mereproduksi contoh mereka:

{% if athlete_list %}
    Number of athletes: {{ athlete_list|length }}
{% else %}
    No athletes.
{% endif %}
Alex Martelli
sumber
| panjang saya selalu bingung dengan jinja templating di Flask dan dengan Django. Terima kasih untuk informasi. Sangat membantu.
Doogle
7
The lengthfilter juga tampaknya bekerja di blok bersyarat. eg{% if athlete_list|length > 1 %}...{% endif %}
Thismatters
93

Jika Anda menggunakan Django baru-baru ini, daftar perubahan 9530 memperkenalkan blok {% empty%}, yang memungkinkan Anda untuk menulis

{% for athlete in athlete_list %}
  ...
{% empty %}
  No athletes
{% endfor %}

Berguna ketika sesuatu yang ingin Anda lakukan melibatkan iterasi pada daftar yang tidak kosong.

Dave W. Smith
sumber
20

Daftar dianggap Falsejika tidak memiliki elemen, sehingga Anda dapat melakukan sesuatu seperti ini:

{% if mylist %}
    <p>I have a list!</p>
{% else %}
    <p>I don't have a list!</p>
{% endif %}
mipadi
sumber
13

Jika Anda mencoba myList | length dan myList | length_is dan tidak mendapatkan hasil yang diinginkan, maka Anda harus menggunakan myList.count

Nilesh Tighare
sumber
6

Anda dapat mencoba dengan:

{% if theList.object_list.count > 0 %}
    blah, blah...
{% else %}
    blah, blah....
{% endif %} 
Atarx
sumber
1

Collection.count tidak ada braket

{% if request.user.is_authenticated %}
{{wishlists.count}}
{% else %}0{% endif %}
Ahmed Adewale
sumber
1

Saya perlu panjang koleksi untuk memutuskan apakah saya harus membuat tabel <thead></thead>

tetapi tidak tahu mengapa @ Django 2.1.7 jawaban yang dipilih akan gagal (kosong) forloopsesudahnya.

Saya terbiasa {% if forloop.first %} {% endif %}mengatasi:

<table>
    {% for record in service_list %}
        {% if forloop.first %}
            <thead>
            <tr>
                <th>日期</th>
            </tr>
            </thead>
        {% endif %}
        <tbody>
        <tr>
            <td>{{ record.date }}</td>
        </tr>
    {% endfor %}
    </tbody>
</table>
CK
sumber