Bagaimana cara mengakses elemen array di templat Django?

167

Saya mendapatkan array yang arrditeruskan ke template Django saya. Saya ingin mengakses elemen individual dari array di array (mis. arr[0], arr[1]Dll) alih-alih melalui seluruh array.

Apakah ada cara untuk melakukan itu di template Django?

miket
sumber
4
Anda dapat mengakses item seperti ini arr.0,, arr.1... Solusi lain: tulis tag templat Anda sendiri arr|array_item: "0" atau sesuatu seperti ini.
rphonika
1
@rphonika Ya, contoh di sini: stackoverflow.com/a/29664945/2714931
WeizhongTu

Jawaban:

304

Ingat bahwa notasi titik dalam templat Django digunakan untuk empat notasi yang berbeda dalam Python. Dalam sebuah templat, foo.bardapat berarti salah satu dari:

foo[bar]       # dictionary lookup
foo.bar        # attribute lookup
foo.bar()      # method call
foo[bar]       # list-index lookup

Itu mencoba mereka dalam urutan ini sampai menemukan kecocokan. Jadi foo.3akan membuat Anda daftar indeks Anda karena objek Anda bukan dict dengan 3 sebagai kunci, tidak memiliki atribut bernama 3, dan tidak memiliki metode bernama 3.

Ned Batchelder
sumber
3
Bukankah yang pertama dan terakhir lebih seperti foo['bar']?
Bob Stein
2
Tampaknya tidak ada cara untuk mengakses item daftar menggunakan indeks variabel :(
Vicky Chijwani
Setuju dengan @VickyChijwani: opsi keempat di atas tidak valid. Templat Django tampaknya tidak melakukan pencarian daftar-indeks dengan variabel
ehacinom
@hiyume Bagaimana cara mengatasinya?
Csaba Toth
Saya tidak mengerti bahwa saya tidak dapat menemukannya di dokumentasi resmi. Bisakah Anda memberikan sumber untuk posting itu? Saya juga kagum bagaimana jawaban ini tidak diterima saat ini.
Kaszanas
149
arr.0
arr.1

dll.

Ofri Raviv
sumber
11
cara mencetak dinamis seperti ex: arr.variablename
Nandha Kumar
Apakah ada cara untuk melakukan ini tanpa angka ajaib? Dengan kata lain untuk "beri nama", 0,1 .2 dll ...? Seperti array ["nama depan"], array ["nama belakang"] dll.
cyberjoac
@cyberjoac dalam hal ini gunakan dict. Pada tampilan: d = {'first_name': 'foo', 'last_name': 'bar'}. Dalam templat {{d.first_name}} akan berfungsi dengan baik.
Ofri Raviv
31

Anda dapat mengakses elemen urutan dengan arr.0 arr.1 dan seterusnya. Lihat bab Sistem template Django dari buku Django untuk informasi lebih lanjut.

ema
sumber
2
Tautannya
7

ketika Anda rendermeminta tou coctextbeberapa informasi: untuk exampel:

return render(request, 'path to template',{'username' :username , 'email'.email})

Anda dapat mengaksesnya di template seperti ini: for variabels :

{% if username %}{{ username }}{% endif %}

for array :

{% if username %}{{ username.1 }}{% endif %}
{% if username %}{{ username.2 }}{% endif %}

Anda juga dapat memberi nama objek array views.pydan sepuluh menggunakannya seperti:

{% if username %}{{ username.first }}{% endif %}

jika ada masalah lain saya ingin membantu Anda

Omid reza
sumber