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 ...

M. Ryan
sumber

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 }}
Daniel Roseman
sumber
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 %}
Mark Lavin
sumber
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


sumber
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 }}
RealScatman
sumber