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.

Jawaban:


184

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


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 ^ _ ^


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.


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.

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.