Récupère les longueurs d'une liste dans un modèle jinja2

315

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>
fil volant
la source

Réponses:

533
<span>You have {{products|length}} products</span>

Vous pouvez également utiliser cette syntaxe dans des expressions comme

{% if products|length > 1 %}

Les filtres intégrés de jinja2 sont documentés ici ; et spécifiquement, comme vous l'avez déjà trouvé, 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, le "nombre de produits" ("longueur de la liste") sera indiqué .

Alex Martelli
la source
Pouvons-nous vérifier non défini aussi? Je dois utiliser {% si les produits ne sont pas ...%}, ce qui est assez fatigant
Nam G VU
@wvxvw cela fonctionne: {% set item_count = items | length %}tant itemsqu'une liste, un dict, etc.
kbolino
7

Le commentaire d'Alex semble bon mais j'étais toujours confus avec l'utilisation de la gamme. Ce qui suit a fonctionné pour moi tout en travaillant sur une condition pour utiliser la 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 %}
Ashwin
la source
2

J'ai rencontré un problème avec la longueur de None, ce qui conduit à une erreur de serveur interne: TypeError: l'objet de type 'NoneType' n'a pas de len ()

Ma solution de contournement affiche simplement 0 si l'objet est Aucun et calcule la longueur d'autres types, comme la liste dans mon cas:

{{'0' if linked_contacts == None else linked_contacts|length}}
Dmitri
la source
Vous pouvez utiliser aucune fonction intégrée pour tester Aucun . Vérifiez plus ici: https://jinja.palletsprojects.com/en/2.10.x/templates/#none . L'exemple est sur ce fil: /programming/19614027/jinja2-template-variable-if-none-object-set-a-default-value
Wojciech Jakubas