Como acessar elementos de array em um template Django?

167

Estou recebendo uma matriz arrpassada para o meu modelo Django. Eu quero acessar elementos individuais da matriz na matriz (por exemplo arr[0], arr[1]) etc. em vez de fazer um loop por toda a matriz.

Existe uma maneira de fazer isso em um modelo do Django?

miket
fonte
4
Você pode acessar itens como este arr.0, arr.1... Outra solução: escreva sua própria tag de modelo arr|array_item: "0" ou algo assim.
rphonika
1
@rphonika Sim, o exemplo aqui: stackoverflow.com/a/29664945/2714931
WeizhongTu

Respostas:

304

Lembre-se de que a notação de ponto em um modelo do Django é usada para quatro notações diferentes no Python. Em um modelo, foo.barpode significar:

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

Ele os tenta nessa ordem até encontrar uma correspondência. Assim foo.3, você obterá seu índice de lista porque seu objeto não é um ditado com 3 como chave, não possui um atributo chamado 3 e não possui um método chamado 3.

Ned Batchelder
fonte
3
Não são os primeiros e os últimos mais parecidos foo['bar']?
Bob Stein
2
Parece não haver maneira de acessar um item da lista usando um índice variável :(
Vicky Chijwani
Concorde com @VickyChijwani: a quarta opção acima não é válida. Templates Django não parecem fazer pesquisas lista-índice com as variáveis
ehacinom
@hiyume Como superar isso?
precisa saber é o seguinte
Não entendo que não encontrei isso na documentação oficial. Você poderia fornecer uma fonte para esse post? Também estou surpreso como isso não é aceito atualmente.
Kaszanas 12/07
149
arr.0
arr.1

etc.

Ofri Raviv
fonte
11
como imprimir dinâmico como ex: arr.variablename
Nandha Kumar
Existe alguma maneira de fazer isso sem números mágicos? Em outras palavras, "nomear" o .0 .1 .2 etc ...? Tais como array ["primeiro nome"], array ["sobrenome"] etc.
cyberjoac
@cyberjoac nesse caso, use um ditado. Na exibição: d = {'first_name': 'foo', 'last_name': 'bar'}. No modelo {{d.first_name}} funcionará bem.
Ofri Raviv
31

Você pode acessar os elementos de sequência com arr.0 arr.1 e assim por diante. Veja o capítulo do sistema de modelos do Django do livro do django para mais informações.

ema
fonte
2
O link está
desativado
7

quando você rendersolicitar coctextalguma informação: por exemplo:

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

você pode acessá-lo no modelo como este: for variabels :

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

for array :

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

você também pode nomear objetos de matriz views.pye dez usá-lo como:

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

se houver outro problema, desejo ajudá-lo

Omid reza
fonte