web-dev-qa-db-fra.com

Obtenir les longueurs d'une liste dans un modèle jinja2

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>
270
flybywire
<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")

459
Alex Martelli

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

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