Item daftar referensi dengan indeks di dalam cetakan Django?

107

Ini mungkin sederhana, tetapi saya melihat sekeliling dan tidak dapat menemukan jawaban. Apa cara terbaik untuk mereferensikan satu item dalam daftar dari templat Django?

Dengan kata lain, bagaimana saya melakukan padanan {{ data[0] }}dalam bahasa template?

Terima kasih.

pengguna456584
sumber

Jawaban:

184

Sepertinya {{ data.0 }}. Lihat Variabel dan pencarian .

Mike DeSimone
sumber
47
Hal yang mengganggu adalah saya tidak bisa mengatakan {{ data.foo }}, di mana foovariabel dengan nilai indeks di dalamnya dan bukan nama properti.
Mike DeSimone
1
Jika Anda ingin membuat tag kustom, Anda dapat melakukan lebih banyak lagi. Di sini kami hanya mengerjakan hal-hal yang ada di dalamnya.
Mike DeSimone
Tautan tidak berfungsi lagi, coba yang ini: docs.djangoproject.com/en/1.10/ref/templates/api/…
Speccy
76

Cara yang lebih baik: filter template ubahsuaian: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

seperti dapatkan daftar_saya [x] di templat:

dalam template

{% load index %}
{{ my_list|index:x }}

templatetags / index.py

from django import template
register = template.Library()

@register.filter
def index(indexable, i):
    return indexable[i]

jika my_list = [['a','b','c'], ['d','e','f']], Anda dapat menggunakan {{ my_list|index:x|index:y }}template untuk mendapatkanmy_list[x][y]

Ini berfungsi baik dengan "untuk"

{{ my_list|index:forloop.counter0 }}

Teruji dan bekerja dengan baik ^ _ ^

WeizhongTu
sumber
1
Salah satu penjelasan paling sederhana untuk mempelajari aplikasi Tag Template!
garda
5
Ini bagus! Tetapi dengan format {{List | index: x}}, bagaimana cara mengakses nilai di mana saya biasanya menggunakan titik? {{(List | index: x) .name}} jelas tidak berfungsi. Terima kasih!
JTFouquier
Persis apa yang saya cari. Terima kasih!
Grant Bartel
Saya memiliki array yang saya tidak yakin dengan indeks nilai yang saya inginkan{% for id in article_details.heading.contents.article_ids %} {% if id.type == 'DOI' %} {{ article_details.heading.contents.article_ids.forloop.counter0.value }} {% endif %} {% endfor %}
Akin Hwan
Saya mengulang melalui daftar (pertandingan), sementara iterasi saya memiliki daftar lain di mana saya ingin menggunakan indeks (counter0), saya mencoba {{matchTeamEmblems.forloop.counter0.homeTeamID}} tetapi tidak berhasil, matchTeamEmblems adalah daftar saya menghasilkan di simple_tag yang membangun URL (statis ..) untuk emblem saya tetapi saya tidak dapat mengaksesnya
kaya
24

{{ data.0 }} harus bekerja.

Katakanlah Anda menulis data.objdjango mencoba data.objdan data.obj(). Jika tidak berhasil, itu akan dicoba data["obj"]. Dalam kasus Anda data[0]dapat ditulis sebagai {{ data.0 }}. Tetapi saya menyarankan Anda untuk menarik data[0]tampilan dan mengirimkannya sebagai variabel terpisah.

yilmazhuseyin.dll
sumber
1

@ jennifer06262016, Anda pasti dapat menambahkan filter lain untuk mengembalikan objek di dalam Django Queryset.

@register.filter 
def get_item(Queryset):
    return Queryset.your_item_key

Dalam hal ini, Anda akan mengetik sesuatu seperti ini {{Queryset | index: x | get_item}} ke dalam template Anda untuk mengakses beberapa objek kamus. Ini bekerja untuk saya.

Kendrick Fong
sumber