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 ...

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 }}

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 %}

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


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 }}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.