Dapatkan panjang daftar di template jinja2

315

Bagaimana cara saya mendapatkan jumlah elemen dalam daftar di template jinja2?

Misalnya, dalam Python:

print(template.render(products=[???]))

dan di jinja2

<span>You have {{what goes here?}} products</span>
flybywire
sumber

Jawaban:

533
<span>You have {{products|length}} products</span>

Anda juga dapat menggunakan sintaks ini dalam ekspresi seperti

{% if products|length > 1 %}

filter bawaan jinja2 didokumentasikan di sini ; dan secara khusus, seperti yang sudah Anda temukan, length(dan sinonimnya count) didokumentasikan ke:

Kembalikan jumlah item dari urutan atau pemetaan.

Jadi, sekali lagi seperti yang Anda temukan, {{products|count}}(atau setara {{products|length}}) di template Anda akan memberikan "jumlah produk" ("panjang daftar")

Alex Martelli
sumber
Bisakah kita memeriksa undefined juga? Saya harus menggunakan {% jika produk tidak ada ...%} yang cukup melelahkan
Nam G VU
@wvxvw ini berfungsi: {% set item_count = items | length %}asalkan itemsdaftar,
dikt
7

Komentar Alex terlihat bagus tetapi saya masih bingung dengan menggunakan jangkauan. Berikut ini berfungsi untuk saya saat bekerja pada kondisi menggunakan panjang dalam kisaran.

{% for i in range(0,(nums['list_users_response']['list_users_result']['users'])| length) %}
<li>    {{ nums['list_users_response']['list_users_result']['users'][i]['user_name'] }} </li>
{% endfor %}
Ashwin
sumber
2

Saya mengalami masalah dengan panjang Tidak Ada, yang mengarah ke Kesalahan Server Internal: TypeError: objek tipe 'NoneType' tidak memiliki len ()

Solusi saya hanya menampilkan 0 jika objek Tidak Ada dan menghitung panjang jenis lainnya, seperti daftar dalam kasus saya:

{{'0' if linked_contacts == None else linked_contacts|length}}
Dmitri
sumber
Anda bisa menggunakan tidak ada build-in fungsi untuk tes untuk Tidak . Periksa lebih lanjut di sini: https://jinja.palletsprojects.com/en/2.10.x/templates/#none . Contoh ada di utas ini: /programming/19614027/jinja2-template-variable-if-none-object-set-a-default-value
Wojciech Jakubas