Comment obtenir le nombre d'éléments dans une liste dans le modèle jinja2?
Par exemple, en Python:
print(template.render(products=[???]))
et dans jinja2
<span>You have {{what goes here?}} products</span>
<span>You have {{products|length}} products</span>
Vous pouvez également utiliser cette syntaxe dans des expressions telles que
{% if products|length > 1 %}
les filtres internes de jinja2 sont documentés ici ; et plus précisément, comme vous l'avez déjà constaté, length
(et son synonyme count
) est documenté pour:
Renvoie le nombre d'éléments d'une séquence ou d'un mappage.
Donc, encore une fois comme vous l'avez trouvé, {{products|count}}
(ou de manière équivalente {{products|length}}
) dans votre modèle donnera le "nombre de produits" ("longueur de la liste")
Le commentaire d'Alex a l'air bien, mais j'étais toujours confus avec l'utilisation de la portée. Ce qui suit a fonctionné pour moi alors que je travaillais sur une condition pour en utilisant une longueur dans la plage.
{% for i in range(0,(nums['list_users_response']['list_users_result']['users'])| length) %}
<li> {{ nums['list_users_response']['list_users_result']['users'][i]['user_name'] }} </li>
{% endfor %}
J'ai rencontré un problème avec la longueur de None, ce qui entraîne une erreur de serveur interne: TypeError: l'objet de type 'NoneType' n'a pas de len ()
Ma solution de contournement affiche uniquement 0 si l'objet est Aucun et calcule la longueur d'autres types, comme liste dans mon cas:
{{'0' if linked_contacts == None else linked_contacts|length}}