Почему моя логика состояния не работает так, как ожидалось в Jinja2/CherryPy?
{% if bCat2 == True %}
<div>True</div>
{% else %}
<div>False</div>
возвращает <div>False</div>
, даже если bCat2
и True
.
Спасибо,
Эндрю!--5-->
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 %}
проверьте, является ли переменная ложные
{% if bCat2 is sameas false %}
<div>False</div>
{% endif %}
Я хотел бы добавить, что если ваша логика немного сложнее, вы захотите прочитать О области.
Как говорится в официальная документация:
начиная с версии 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 }}