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?


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.


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.


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


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.