Jak uzyskać dostęp do elementów tablicy w szablonie Django?


166

Otrzymuję tablicę arrprzekazaną do mojego szablonu Django. Chcę uzyskać dostęp do poszczególnych elementów tablicy w tablicy (np arr[0], arr[1]) itd. Zamiast pętli przez całą tablicę.

Czy jest na to sposób w szablonie Django?


3
Możesz uzyskać dostęp do elementu tak arr.0, arr.1... Innym rozwiązaniem: napisać swój własny szablon arr|array_item: "0" lub coś podobnego.
rphonika

1
@rphonika Tak, przykład tutaj: stackoverflow.com/a/29664945/2714931
WeizhongTu

Odpowiedzi:


303

Pamiętaj, że notacja kropkowa w szablonie Django jest używana dla czterech różnych notacji w Pythonie. W szablonie foo.barmoże oznaczać:

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

Próbuje je w tej kolejności, aż znajdzie dopasowanie. Otrzymasz więc foo.3indeks listy, ponieważ Twój obiekt nie jest dyktatem z 3 jako kluczem, nie ma atrybutu o nazwie 3 i nie ma metody o nazwie 3.


3
Czy to nie pierwszy i ostatni bardziej podobny foo['bar']?
Bob Stein

2
Wydaje się, że nie ma sposobu, aby uzyskać dostęp do elementu listy przy użyciu indeksu zmiennej :(
Vicky Chijwani

Zgadzam się z @VickyChijwani: czwarta opcja powyżej jest nieważna. Szablony Django nie wydają się zrobić wyszukiwań list-indeksowych ze zmiennymi
ehacinom

@hiyume Jak to przezwyciężyć?
Csaba Toth

Nie rozumiem, że nie mogłem znaleźć tego w oficjalnej dokumentacji. Czy możesz podać źródło tego posta? Jestem również zdumiony, że ta odpowiedź nie jest obecnie akceptowana.
Kaszanas

148
arr.0
arr.1

itp.


10
jak drukować dynamicznie, na przykład: arr.variablename
Nandha Kumar

Czy można to zrobić bez magicznych liczb? Innymi słowy, aby „nazwać” .0 .1 .2 itd ...? Takich jak tablica ["imię"], tablica ["nazwisko"] itp ..
cyberjoac,

@cyberjoac w takim przypadku użyj dict. W widoku: d = {'first_name': 'foo', 'last_name': 'bar'}. W szablonie {{d.first_name}} będzie działać dobrze.
Ofri Raviv


7

gdy renderprośba dotyczy coctextpewnych informacji: na przykład:

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

możesz uzyskać do niego dostęp w tym szablonie: for variabels :

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

for array :

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

możesz także nazwać obiekty tablicowe w programie views.pyi użyć go w następujący sposób:

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

jeśli jest inny problem, chciałbym ci pomóc

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.