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

And*_*oos 16 cherrypy jinja2

{% if bCat2 == True %}
    <div>True</div>
{% else %}
    <div>False</div>
Run Code Online (Sandbox Code Playgroud)

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

Evg*_*kov 37

这部分文档可以帮助您:

特殊常量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 %}
Run Code Online (Sandbox Code Playgroud)

  • 这应该是正确的答案。如果列表很大,并且我们想将大列表发送到模板,则遍历一个大列表并将每个布尔值更改为按接受答案的字符串可能会变得很昂贵。 (2认同)

And*_*oos 12

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

str(bCat2)
Run Code Online (Sandbox Code Playgroud)

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

{% if bCat2 == 'True' %}
    <div>True</div>
{% else %}
    <div>False</div>
Run Code Online (Sandbox Code Playgroud)

  • 但是最好在 Jinja2 中直接比较,而不是将布尔值转换为字符串,而不是 @Andrew?我认为@mrroot5 答案将是测试布尔值是真还是假的更简单、更好的方法。只是出于好奇,为什么有人应该倾向于您提出的解决方案? (3认同)

小智 9

在Jinja2中执行此操作的正确方法是:

{% if bCat2 is sameas true %}
    <div>True</div>
{% elif bCat2 is sameas false %}
    <div>False</div>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

你不能做的原因

{% if bCat2 == true %}
Run Code Online (Sandbox Code Playgroud)

如果bCat2 == 1或bCat2 == 1.0,它也将被视为True.


mrr*_*ot5 7

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

像python一样解决这个问题.

检查变量是否为真

{% if bCat2 %}
    <div>True</div>
{% else %}
    <div>False</div>
Run Code Online (Sandbox Code Playgroud)

检查变量是否为false

{% if not bCat2 %}
    <div>False</div>
{% else %}
    <div>True</div>
Run Code Online (Sandbox Code Playgroud)

Jinja2如果文档

选项2:Jinja2 sameas解决方案

像jinja2一样解决.Becareful布尔小写.

检查变量是否为真

{% if bCat2 is sameas true %}
    <div>True</div>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

检查变量是否为false

{% if bCat2 is sameas false %}
    <div>False</div>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

Jinja2 sameas文档

  • 对于那些绊倒这个的人:当您将布尔变量放入 --extra-vars(of ansible-playbook) 时,不要这样做:`--extra-vars="bCat2=True"`。这行不通,因为命令行应用程序生成了一个类型为 string 的 bCat2 var。最好在这里使用 json:`--extra-vars='{ "bCat2": true }'`。 (2认同)