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?

miket
źródło
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.

Ned Batchelder
źródło
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.

Ofri Raviv
źródło
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

Omid reza
źródło