Получение длин списка в шаблоне jinja2
Вопрос
Как мне получить количество элементов в списке в шаблоне jinja2?
Например, в Python:
print(template.render(products=[???]))
и в jinja2
<span>You have {{what goes here?}} products</span>
Решение
<span>You have {{products|length}} products</span>
Вы также можете использовать этот синтаксис в выражениях типа
{% if products|length > 1 %}
встроенные фильтры jinja2 задокументированы здесь;и, в частности, как вы уже выяснили, length
(и его синоним count
) документируется для:
Возвращает количество элементов последовательности или сопоставления.
Итак, опять же, как вы уже нашли, {{products|count}}
(или эквивалентно {{products|length}}
) в вашем шаблоне будет указано "количество товаров" ("длина списка").
Другие советы
Комментарий Алекса выглядит неплохо, но я все еще был сбит с толку использованием range .Следующее сработало для меня при работе над условием 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 %}
Я столкнулся с проблемой с длиной None, которая приводит к внутренней ошибке сервера:Ошибка типа:объект типа 'NoneType' не имеет функции len()
Мой обходной путь - просто отображать 0, если object равен None, и вычислять длину других типов, например list в моем случае:
{{'0' if linked_contacts == None else linked_contacts|length}}