Почему логика моего состояния не работает так, как ожидалось в Jinja2/CherryPy?
{% if bCat2 == True %}
<div>True</div>
{% else %}
<div>False</div>
Возвращает <div>False</div>
, даже если bCat2
равно True
.
Спасибо,
Андрей
5 ответов:
Эта часть документации может помочь вам:
Специальные константы true, false и none действительно являются строчными. Потому что это вызвало путаницу в прошлом, когда написание True расширяет к неопределенной переменной, которая считается ложной, все три из них может быть написано и в титульном падеже (True, False и None). Однако для последовательность (все идентификаторы Jinja строчные) Вы должны использовать версии в нижнем регистре .Источник: http://jinja.pocoo.org/docs/templates/
Попробуйте этот код:
{% if bCat2 == true %} <div>True</div> {% else %} <div>False</div> {% endif %}
Чтобы проверить булеву переменную в шаблоне, преобразуйте ее в строку в Python
str(bCat2)
И затем сравнил его со строкой в шаблоне
{% if bCat2 == 'True' %} <div>True</div> {% else %} <div>False</div>
Правильный способ сделать это в Jinja2:
{% if bCat2 is sameas true %} <div>True</div> {% elif bCat2 is sameas false %} <div>False</div> {% endif %}
Причина, по которой вы не можете сделать
{% if bCat2 == true %}
Заключается в том, что если bCat2 == 1 или bCat2 == 1.0, то это также будет считаться истинным.
Вариант 1: Наиболее распространенное решение
Решите это, как это делает python.
Проверьте, является ли переменная true
{% if bCat2 %} <div>True</div> {% else %} <div>False</div>
Проверьте, является ли переменная false
{% if not bCat2 %} <div>False</div> {% else %} <div>True</div>
Вариант 2: Решение Jinja2 sameas
Решайте, как jinja2. Becareful с булевым строчным регистром.
Проверьте, является ли переменная true
{% if bCat2 is sameas true %} <div>True</div> {% endif %}
Проверьте, является ли переменная false
{% if bCat2 is sameas false %} <div>False</div> {% endif %}
Я хотел бы добавить, что если ваша логика немного сложнее, вы можете прочитать о scopes.
Как указано в официальной документации :
Начиная с версии 2.10 более сложные случаи использования могут быть обработаны с помощью объекты пространства имен, которые позволяют распространять изменения по областям:
{% set ns = namespace(found=false) %} {% for item in items %} {% if item.check_something() %} {% set ns.found = true %} {% endif %} * {{ item.title }} {% endfor %} Found item having something: {{ ns.found }}