Django Templating: bagaimana mengakses properti dari item pertama dalam daftar


88

Cukup mudah. Saya memiliki daftar Python yang saya berikan ke template Django.

Saya secara khusus dapat mengakses item pertama dalam daftar ini menggunakan

{{ thelist|first }}

Namun, saya juga ingin mengakses properti item itu ... idealnya Anda akan mengira properti itu akan terlihat seperti ini:

{{ thelist|first.propertyName }}

Namun sayangnya, tidak.

Apakah ada solusi template untuk ini, atau saya hanya akan mendapati diri saya melewati variabel template tambahan ...

Jawaban:


184

Anda dapat mengakses item apa pun dalam daftar melalui nomor indeksnya. Dalam templat ini berfungsi sama seperti pencarian properti lainnya:

{{ thelist.0.propertyName }}

Hmm. Namun ini tidak berfungsi dengan inline_admin_formset. Saya kira iterator tidak bekerja seperti yang saya harapkan.
Shayne

Halo Daniel, Bisakah Anda memeriksa pertanyaan saya terkait template / view stackoverflow.com/questions/34791375/… ?
Sathish

Ini jauh lebih baik daripada forloop untuk melewati setiap pesan kesalahan. Terima kasih!
IIllIIll

1
Dan thelist.-1.propertyNameuntuk item terakhir?
Asqiir

1
Tidak, sayangnya itu tidak akan berhasil, Django tidak dapat menguraikannya. Anda akan perlu menggunakan withtag bersama dengan |last, seperti yang disarankan Mark di jawaban lain.
Daniel Roseman

33

Anda dapat menggabungkan withtag template dengan firstfilter template untuk mengakses properti.

{% with thelist|first as first_object %}
    {{ first_object.propertyname }}
{% endwith %}

1
Untuk kamus, pertama-tama mengembalikan tupel untuk pasangan kunci / nilai, ini agak jelek tetapi saya menambahkan pernyataan dengan yang lain untuk hanya mendapatkan nilainya. {% dengan daftar | pertama sebagai objek_pertama%} {% dengan objek_pertama.1 sebagai objek%} {{objek}} {% endwith%} {% endwith%}
Matthew Purdon

21

Jika Anda mencoba mengakses banyak bidang, ingatlah untuk menambahkan all, sehingga akan terlihat seperti iniobject.m2m_field.all.0.item_property


1
Bisa memberi Anda +10 menyebutkan "semua", Anda menyelamatkan hari saya;)
cwhisperer

0

sintaks / jawaban yang berpotensi lebih jelas untuk mengakses properti ManyToManyField dalam daftar objek yang disediakan untuk template django akan terlihat seperti ini:

{{ object_list.0.m2m_fieldname.all.0.item_property }}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.