Uzyskaj długości listy w szablonie jinja2

315

Jak uzyskać liczbę elementów na liście w szablonie jinja2?

Na przykład w Pythonie:

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

i w jinja2

<span>You have {{what goes here?}} products</span>
Lecieć jak po sznurku
źródło

Odpowiedzi:

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

Możesz również użyć tej składni w wyrażeniach takich jak

{% if products|length > 1 %}

Wbudowane filtry jinja2 są udokumentowane tutaj ; a konkretnie, jak już odkryłeś, length(i jego synonim count) jest udokumentowany:

Zwraca liczbę elementów sekwencji lub mapowania.

Tak więc, jak już znalazłeś {{products|count}}(lub równoważnie {{products|length}}) w swoim szablonie podasz „liczbę produktów” („długość listy”)

Alex Martelli
źródło
Czy możemy również sprawdzić, czy nie jest zdefiniowany? Muszę użyć {%, jeśli produktów nie ma ...%}, co jest dość męczące
Nam G VU
@wvxvw to działa: {% set item_count = items | length %}tak długo jak itemsjest lista,
nagrania
7

Komentarz Alexa wygląda dobrze, ale nadal byłem mylony z używaniem zasięgu. Poniższe działało dla mnie podczas pracy nad warunkiem przy użyciu długości w zakresie.

{% 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
źródło
2

Wystąpił problem z długością None, który prowadzi do wewnętrznego błędu serwera: TypeError: obiekt typu „NoneType” nie ma len ()

Moje obejście wyświetla tylko 0, jeśli obiektem jest Brak i obliczam długość innych typów, takich jak lista w moim przypadku:

{{'0' if linked_contacts == None else linked_contacts|length}}
Dmitri
źródło
Możesz użyć żadnej wbudowanej funkcji do testowania na Brak . Sprawdź więcej tutaj: https://jinja.palletsprojects.com/en/2.10.x/templates/#none . Przykład jest w tym wątku: /programming/19614027/jinja2-template-variable-if-none-object-set-a-default-value
Wojciech Jakubas