¿Cómo acceder a los elementos de la matriz en una plantilla de Django?

167

Recibo una matriz que se arrpasa a mi plantilla de Django. Quiero acceder a elementos individuales de la matriz en la matriz (por ejemplo arr[0], arr[1]etc.) en lugar de recorrer toda la matriz.

¿Hay alguna manera de hacer eso en una plantilla de Django?

miket
fuente
44
Puede acceder a elementos como este arr.0, arr.1... Otra solución: escriba su propia etiqueta de plantilla arr|array_item: "0" o algo así.
rphonika
1
@rphonika Sí, ejemplo aquí: stackoverflow.com/a/29664945/2714931
WeizhongTu

Respuestas:

304

Recuerde que la notación de puntos en una plantilla de Django se usa para cuatro anotaciones diferentes en Python. En una plantilla, foo.barpuede significar cualquiera de:

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

Los prueba en este orden hasta que encuentra una coincidencia. Por foo.3lo tanto , obtendrá su índice de lista porque su objeto no es un dict con 3 como clave, no tiene un atributo llamado 3 y no tiene un método llamado 3.

Ned Batchelder
fuente
3
¿No son el primero y el último más foo['bar']?
Bob Stein
2
Parece que no hay forma de acceder a un elemento de la lista usando un índice variable :(
Vicky Chijwani
De acuerdo con @VickyChijwani: la cuarta opción anterior no es válida. Las plantillas de Django no parecen hacer búsquedas de índice de lista con variables
ehacinom
@hiyume ¿Cómo superar eso?
Csaba Toth
No entiendo que no pude encontrar eso en la documentación oficial. ¿Podría proporcionar una fuente para esa publicación? También estoy sorprendido de cómo esta respuesta no se acepta actualmente.
Kaszanas
149
arr.0
arr.1

etc.

Ofri Raviv
fuente
11
cómo imprimir dinámico como ex: arr.variablename
Nandha Kumar
¿Hay alguna manera de hacer esto sin números mágicos? En otras palabras, ¿"nombrar" el .0 .1 .2, etc ...? Tales como array ["nombre"], array ["apellido"] etc.
cyberjoac
@cyberjoac en ese caso use un dict. En la vista: d = {'first_name': 'foo', 'last_name': 'bar'}. En la plantilla {{d.first_name}} funcionará bien.
Ofri Raviv
7

cuando rendersolicite coctextalguna información: para examinar:

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

puedes acceder a ella en una plantilla como esta: for variabels :

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

for array :

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

también puede nombrar objetos de matriz views.pyy diez lo usan como:

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

si hay otro problema deseo ayudarte

Omid reza
fuente