【发布时间】:2012-01-16 00:50:03
【问题描述】:
{% if bCat2 == True %}
<div>True</div>
{% else %}
<div>False</div>
即使bCat2 是True,也会返回<div>False</div>。
谢谢,
安德鲁
【问题讨论】:
{% if bCat2 == True %}
<div>True</div>
{% else %}
<div>False</div>
即使bCat2 是True,也会返回<div>False</div>。
谢谢,
安德鲁
【问题讨论】:
这部分文档可以帮助您:
特殊常量 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 一样解决这个问题。
{% if bCat2 %}
<div>True</div>
{% else %}
<div>False</div>
{% if not bCat2 %}
<div>False</div>
{% else %}
<div>True</div>
像 jinja2 一样解决问题。 小心使用小写布尔值。
{% if bCat2 is sameas true %}
<div>True</div>
{% endif %}
{% if bCat2 is sameas false %}
<div>False</div>
{% endif %}
【讨论】:
--extra-vars="bCat2=True"。这是行不通的,因为命令行应用程序生成了一个字符串类型的 bCat2 var。最好在这里使用 json:--extra-vars='{ "bCat2": true }'.
--extra-vars='bCat2='
在 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。
【讨论】:
要测试模板中的布尔变量,请将其转换为 Python 中的字符串
str(bCat2)
然后将其与模板中的字符串进行比较
{% if bCat2 == 'True' %}
<div>True</div>
{% else %}
<div>False</div>
【讨论】:
我想补充一点,如果您的逻辑有点复杂,您可能需要了解范围。
从 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 }}
【讨论】:
拿这个:
{% 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>
【讨论】: