В шаблонах Jinja2 нет прямого эквивалента функции any()
.
Для 3 жестко закодированных элементов я бы просто использовал булеву логику or
:
{% if item['genre'] or item['type'] or item['color'] %}
В противном случае вы можете использовать select()
фильтр без аргумента (за которым следует first()
для принудительного выполнения итерации).Поскольку select()
сам является генератором, использование first()
на select()
делает это короткое замыкание таким образом, как any()
будет:
{% if (item['genre'], item['type'], item['color'])|select|first %}
Без аргумента, select()
возвращает любые объекты извходная последовательность, которая имеет значение true, и first()
гарантирует, что она повторяет не больше, чем нужно для поиска одного такого элемента.
Последний вариант - зарегистрировать пользовательский фильтр , чтобы просто добавить any()
самому Джинджа;Я также добавил бы all()
в этом случае.Вы можете зарегистрировать обе функции напрямую , поскольку ни одна из них не принимает опций:
environment.filters['any'] = any
environment.filters['all'] = all
, после чего вы можете использовать
{% if (item['genre'], item['type'], item['color'])|any %}