为什么我的条件逻辑在Jinja2 / CherryPy中没有按预期工作?

时间:2011-12-08 15:34:18

标签: cherrypy jinja2

{% if bCat2 == True %}
    <div>True</div>
{% else %}
    <div>False</div>

即使<div>False</div>bCat2,也会返回True。 谢谢, 安德鲁

6 个答案:

答案 0 :(得分:34)

这部分文档可以帮助您:

  

特殊常量true,false和none确实是小写的。   因为这在过去引起了混乱,所以写True时会扩大   对于一个被认为是假的未定义变量,它们都是三个   也可以用标题大小写(真,假和无)。但是   一致性(所有Jinja标识符都是小写)你应该使用   小写版本

来源:http://jinja.pocoo.org/docs/templates/

尝试该代码:

{% if bCat2 == true %}
<div>True</div>
{% else %}
<div>False</div>
{% endif %}

答案 1 :(得分:12)

要测试模板中的布尔变量,请将其转换为Python中的字符串

str(bCat2)

然后将其与模板中的字符串进行比较

{% if bCat2 == 'True' %}
    <div>True</div>
{% else %}
    <div>False</div>

答案 2 :(得分:8)

在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,它也将被视为True。

答案 3 :(得分:5)

选项1:最常见的解决方案

像python一样解决这个问题。

检查变量是否为真

{% if bCat2 %}
    <div>True</div>
{% else %}
    <div>False</div>

检查变量是否为假

{% if not bCat2 %}
    <div>False</div>
{% else %}
    <div>True</div>

Jinja2 If documentation

选项2:Jinja2与解决方案相同

像jinja2一样解决。使用布尔小写字母 Becareful

检查变量是否为真

{% if bCat2 is sameas true %}
    <div>True</div>
{% endif %}

检查变量是否为假

{% if bCat2 is sameas false %}
    <div>False</div>
{% endif %}

Jinja2 sameas documentation

答案 4 :(得分:1)

我想补充一点,如果您的逻辑有点复杂,则可能需要阅读有关范围的信息。

official documentation中所述:

  

从2.10版开始,可以使用以下方法处理更复杂的用例   允许跨范围传播更改的名称空间对象:

{{1}}

答案 5 :(得分:0)

拿这个:

{% if bCat2 is true %}
    <div>True</div>
{% else %}
    <div>False</div>
{% endif %}

我的测试:

$ python -m pip install j2cli
$ j2 <(echo "{% if false is true %}
    <div>True</div>
{% else %}
    <div>False</div>
{% endif %}")

    <div>False</div>

$ j2 <(echo "{% if true is true %}
    <div>True</div>
{% else %}
    <div>False</div>
{% endif %}")

    <div>True</div>