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.

Odpowiedzi:



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


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


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.