Plantillas de Django: cómo acceder a las propiedades del primer elemento de una lista

88

Bastante simple. Tengo una lista de Python que paso a una plantilla de Django.

Puedo acceder específicamente al primer elemento de esta lista usando

{{ thelist|first }}

Sin embargo, también quiero acceder a una propiedad de ese elemento ... idealmente, pensarías que se vería así:

{{ thelist|first.propertyName }}

Pero, por desgracia, no es así.

¿Hay alguna solución de plantilla para esto, o simplemente me voy a encontrar pasando una variable de plantilla adicional ...

M. Ryan
fuente

Respuestas:

182

Puede acceder a cualquier elemento de una lista a través de su número de índice. En una plantilla, esto funciona igual que cualquier otra búsqueda de propiedades:

{{ thelist.0.propertyName }}
Daniel Roseman
fuente
Hmm. Sin embargo, esto no funciona con un inline_admin_formset. Supongo que el iterador no funciona como esperaba.
Shayne
Hola Daniel, ¿podrías revisar mi pregunta relacionada con la plantilla / vista stackoverflow.com/questions/34791375/… ?
Sathish
Esto es mucho mejor que un forbucle para revisar cada uno de los mensajes de error. ¡Gracias!
IIllIIll
1
¿Y thelist.-1.propertyNamepara el último artículo?
Asqiir
1
No, eso no funcionaría desafortunadamente, Django no puede analizar eso. Debería usar la withetiqueta junto con |last, como sugiere Mark en la otra respuesta.
Daniel Roseman
33

Puede combinar la withetiqueta de plantilla con el firstfiltro de plantilla para acceder a la propiedad.

{% with thelist|first as first_object %}
    {{ first_object.propertyname }}
{% endwith %}
Mark Lavin
fuente
1
Para un diccionario, primero devuelve una tupla para el par clave / valor, es un poco feo pero agregué otra con una declaración para obtener solo los valores. {% con la lista | primero como primer_objeto%} {% con primer_objeto.1 como objeto%} {{objeto}} {% endwith%} {% endwith%}
Matthew Purdon
21

Si está intentando acceder a muchos campos, recuerde agregar all, para que se vea comoobject.m2m_field.all.0.item_property


fuente
1
Podría darte +10 mencionando "todos", me salvaste el día;)
cwhisperer
0

una respuesta / sintaxis potencialmente más clara para acceder a una propiedad ManyToManyField en una lista de objetos proporcionada a la plantilla django se vería así:

{{ object_list.0.m2m_fieldname.all.0.item_property }}
RealScatman
fuente