Obtener longitudes de una lista en una plantilla jinja2


315

¿Cómo obtengo el número de elementos en una lista en la plantilla jinja2?

Por ejemplo, en Python:

print(template.render(products=[???]))

y en jinja2

<span>You have {{what goes here?}} products</span>

Respuestas:


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

También puede usar esta sintaxis en expresiones como

{% if products|length > 1 %}

Los filtros incorporados de jinja2 se documentan aquí ; y específicamente, como ya ha encontrado, length(y su sinónimo count) está documentado para:

Devuelve el número de elementos de una secuencia o mapeo.

Entonces, nuevamente, como lo ha encontrado, {{products|count}}(o equivalente {{products|length}}) en su plantilla le dará el "número de productos" ("longitud de la lista")


¿Podemos verificar si no está definido también? Tengo que usar {% si los productos no son ninguno ...%} lo cual es bastante agotador
Nam G VU

@wvxvw esto funciona: {% set item_count = items | length %}siempre que itemssea ​​una lista, dict, etc.
kbolino

7

El comentario de Alex se ve bien, pero todavía estaba confundido con el uso del rango. Lo siguiente funcionó para mí mientras trabajaba en una condición for usando longitud dentro del rango.

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

2

He experimentado un problema con la longitud de None, lo que lleva a un error interno del servidor: TypeError: el objeto de tipo 'NoneType' no tiene len ()

Mi solución es solo mostrar 0 si el objeto es Ninguno y calcular la longitud de otros tipos, como la lista en mi caso:

{{'0' if linked_contacts == None else linked_contacts|length}}

Puede usar la función incorporada none para probar None . Consulte más aquí: https://jinja.palletsprojects.com/en/2.10.x/templates/#none . El ejemplo está en este hilo: /programming/19614027/jinja2-template-variable-if-none-object-set-a-default-value
Wojciech Jakubas
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.