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

发布于 2024-12-20 00:40:53 字数 230 浏览 1 评论 0原文

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

即使 bCat2True,也会返回

False。 谢谢, 安德鲁

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

Returns <div>False</div> even when bCat2 is True.
Thanks,
Andrew

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

匿名的好友 2024-12-27 00:40:53

这部分文档可以帮助您:

特殊常量 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 %}

This part of documentation can help you:

The special constants true, false and none are indeed lowercase.
Because that caused confusion in the past, when writing True expands
to an undefined variable that is considered false, all three of them
can be written in title case too (True, False, and None). However for
consistency (all Jinja identifiers are lowercase) you should use the
lowercase versions
.

Source: http://jinja.pocoo.org/docs/templates/

Try that code:

{% if bCat2 == true %}
<div>True</div>
{% else %}
<div>False</div>
{% endif %}
够钟 2024-12-27 00:40:53

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

像 python 一样解决这个问题。

检查变量是否为 true

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

检查变量是否为 false

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

Jinja2 If 文档

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

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

检查变量是否为 true

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

检查变量是否为 false

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

Jinja2 相同文档

Option 1: Most common solution

Solve that like python do.

Check if variable is true

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

Check if variable is false

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

Jinja2 If documentation

Option 2: Jinja2 sameas solution

Solve like jinja2 do. Becareful with boolean lowercase.

Check if variable is true

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

Check if variable is false

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

Jinja2 sameas documentation

神仙妹妹 2024-12-27 00:40:53

在 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。

The proper way to do this in Jinja2 is:

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

The reason why you cannot do

{% if bCat2 == true %}

is that if bCat2 == 1 or bCat2 == 1.0 it will also be considered True.

落花随流水 2024-12-27 00:40:53

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

str(bCat2)

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

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

To test a Boolean variable in a template, convert it to a string in Python

str(bCat2)

and then compared it to a string in the template

{% if bCat2 == 'True' %}
    <div>True</div>
{% else %}
    <div>False</div>
夜巴黎 2024-12-27 00:40:53

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

正如官方文档中提到的:

从版本 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 }}

I would like to add that if your logic is a bit more complex you might want to read about scopes.

As mentioned in official documentation:

As of version 2.10 more complex use cases can be handled using
namespace objects which allow propagating of changes across scopes:

{% 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 }}
谜兔 2024-12-27 00:40:53

采取这个:

{% 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>

take this:

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

my test:

$ 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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文