Django Templating: comment accéder aux propriétés du premier élément d'une liste

88

Assez simple. J'ai une liste Python que je transmets à un modèle Django.

Je peux accéder spécifiquement au premier élément de cette liste en utilisant

{{ thelist|first }}

Cependant, je souhaite également accéder à une propriété de cet élément ... idéalement, vous penseriez que cela ressemblerait à ceci:

{{ thelist|first.propertyName }}

Mais hélas, non.

Existe-t-il une solution de modèle à cela, ou vais-je simplement me retrouver à passer une variable de modèle supplémentaire ...

M. Ryan
la source

Réponses:

182

Vous pouvez accéder à n'importe quel élément d'une liste via son numéro d'index. Dans un modèle, cela fonctionne de la même manière que toute autre recherche de propriété:

{{ thelist.0.propertyName }}
Daniel Roseman
la source
Hmm. cela ne fonctionne pas avec un inline_admin_formset cependant. Je suppose que l'itérateur ne fonctionne pas comme je l'attends.
Shayne
Salut Daniel, Pourriez-vous vérifier ma question relative au modèle / vue stackoverflow.com/questions/34791375 /... ?
Sathish le
C'est bien mieux qu'une forboucle pour parcourir chacun des messages d'erreur. Merci!
IIllIIll
1
Et thelist.-1.propertyNamepour le dernier élément?
Asqiir
1
Non, cela ne fonctionnerait malheureusement pas, Django ne peut pas analyser cela. Vous devrez utiliser la withbalise avec |last, comme Mark le suggère dans l'autre réponse.
Daniel Roseman
33

Vous pouvez combiner la withbalise de modèle avec le firstfiltre de modèle pour accéder à la propriété.

{% with thelist|first as first_object %}
    {{ first_object.propertyname }}
{% endwith %}
Mark Lavin
la source
1
Pour un dictionnaire, retourne d'abord un tuple pour la paire clé / valeur, c'est un peu moche mais j'en ai ajouté un autre avec une instruction pour obtenir uniquement les valeurs. {% with thelist | first as first_object%} {% with first_object.1 as object%} {{object}} {% endwith%} {% endwith%}
Matthew Purdon
21

Si vous essayez d'accéder à un champ manytomany, n'oubliez pas d'ajouter all, il ressemblera donc àobject.m2m_field.all.0.item_property


la source
1
Pourrait vous donner +10 en mentionnant "tout", vous avez sauvé ma journée;)
cwhisperer
0

une réponse / syntaxe potentiellement plus claire pour accéder à une propriété ManyToManyField dans une liste d'objets fournie au modèle django ressemblerait à ceci:

{{ object_list.0.m2m_fieldname.all.0.item_property }}
RealScatman
la source