Odwołanie do elementu listy według indeksu w szablonie Django?

107

To może być proste, ale rozejrzałem się i nie mogłem znaleźć odpowiedzi. Jaki jest najlepszy sposób na odwołanie się do pojedynczego elementu na liście z szablonu Django?

Innymi słowy, jak zrobić odpowiednik {{ data[0] }}w języku szablonów?

Dzięki.

user456584
źródło

Odpowiedzi:

184

Na to wygląda {{ data.0 }}. Zobacz Zmienne i wyszukiwania .

Mike DeSimone
źródło
47
Irytujące jest to, że nie mogę powiedzieć {{ data.foo }}, gdzie foojest zmienna z wartością indeksu, a nie nazwą właściwości.
Mike DeSimone
1
Jeśli chcesz utworzyć niestandardowy tag, możesz zrobić o wiele więcej. Tutaj pracujemy tylko z wbudowanymi elementami.
Mike DeSimone
Link już nie działa, wypróbuj ten: docs.djangoproject.com/en/1.10/ref/templates/api/ ...
Speccy
76

Lepszy sposób: niestandardowy filtr szablonów: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

takie jak get my_list [x] w szablonach:

w szablonie

{% 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]

jeśli my_list = [['a','b','c'], ['d','e','f']]możesz użyć {{ my_list|index:x|index:y }}w szablonie, aby uzyskaćmy_list[x][y]

Działa dobrze z „dla”

{{ my_list|index:forloop.counter0 }}

Przetestowane i działa dobrze ^ _ ^

WeizhongTu
źródło
1
Jedno z najprostszych wyjaśnień dotyczących stosowania tagów szablonów!
vanguard69
5
To było świetne! Ale w przypadku formatu {{List | index: x}}, jak mogę uzyskać dostęp do wartości, w których normalnie użyłbym kropki? {{(List | index: x) .name}} oczywiście nie działa. Dziękuję Ci!
JTFouquier
Dokładnie to, czego szukałem. Dziękuję Ci!
Grant Bartel,
Mam tablicę, w której nie jestem pewien indeksu mojej pożądanej wartości{% 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
Iteruję przez listę (dopasowania), podczas iteracji mam inną listę, na której chcę użyć indeksu (counter0), próbowałem {{matchTeamEmblems.forloop.counter0.homeTeamID}}, ale to nie działa, matchTeamEmblems jest listą generuję w simple_tag, który tworzy adres URL (statyczny ..) dla moich emblematów, ale nie mogę uzyskać do nich dostępu
kaya
24

{{ data.0 }} powinno działać.

Powiedzmy, że napisałeś data.objdjango try data.obji data.obj(). Jeśli nie działają, próbuje data["obj"]. W twoim przypadku data[0]można zapisać jako {{ data.0 }}. Ale radzę wciągnąć data[0]widok i wysłać go jako osobną zmienną.

yilmazhuseyin
źródło
1

@ jennifer06262016, zdecydowanie możesz dodać kolejny filtr, aby zwrócić obiekty wewnątrz zestawu django Queryset.

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

W takim przypadku wpisz w swoim szablonie coś takiego, jak to {{Queryset | index: x | get_item}}, aby uzyskać dostęp do jakiegoś obiektu słownika. Mi to pasuje.

Kendrick Fong
źródło