Получить длину списка в шаблоне jinja2

315

Как получить количество элементов в списке в шаблоне jinja2?

Например, в Python:

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

и в jinja2

<span>You have {{what goes here?}} products</span>
ЭЛЕКТРОДИСТАНЦИОННАЯ СИСТЕМА УПРАВЛЕНИЯ
источник

Ответы:

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

Вы также можете использовать этот синтаксис в выражениях, таких как

{% if products|length > 1 %}

Встроенные фильтры jinja2 описаны здесь ; и, в частности, как вы уже нашли, length(и его синоним count) задокументировано:

Вернуть количество элементов последовательности или сопоставления.

Итак, опять же, как вы нашли, {{products|count}}(или эквивалентно {{products|length}}) в вашем шаблоне будет указано «количество продуктов» («длина списка»)

Алекс Мартелли
источник
Можем ли мы проверить неопределенность тоже? Я должен использовать {%, если продуктов нет ...%}, что довольно утомительно
Nam G VU
@wvxvw это работает: {% set item_count = items | length %}пока itemsсписок,
дикт
7

Комментарий Алекса выглядит хорошо, но я все еще не понял, как использовать диапазон. Следующее сработало для меня, работая над условием for, используя длину в пределах диапазона.

{% 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
источник
2

У меня возникла проблема с длиной None, которая приводит к внутренней ошибке сервера: TypeError: объект типа 'NoneType' не имеет len ()

Мой обходной путь просто отображает 0, если object имеет значение None, и вычисляет длину других типов, как list в моем случае

{{'0' if linked_contacts == None else linked_contacts|length}}
Дмитрий
источник
Вы можете использовать встроенную функцию none для проверки на None . Проверьте больше здесь: https://jinja.palletsprojects.com/en/2.10.x/templates/#none . Пример в этой теме: /programming/19614027/jinja2-template-variable-if-none-object-set-a-default-value
Войцех Якубас