如何读取 Jinja2 的环境变量,以便可以在 if 条件中对其进行插值?

问题描述 投票:0回答:1

我尝试思考如何在

Jinja2
文件中使用
YAML
时根据环境变量跳过代码的某些部分。我在网上做了一些研究,询问了 ChatGPT,但我没有找到任何对我有帮助的答案。

所以我做了这个最小的例子:

import os
from jinja2 import Template


os.environ['SKIP']="False"
print(
    Template(
        "{% if env['SKIP'] %}\n"
        '{{ "do not skip" }}\n'
        "{% else %}\n"
        '{{ "skip" }}\n'
        "{% endif %}"
    ).render(env=os.environ)
)

输出

do not skip
(如预期)。

执行以下操作:

import os
os.environ['SKIP']="True"

print(
    Template(
        "{% if env['SKIP'] %}\n"
        '{{ "do not skip" }}\n'
        "{% else %}\n"
        '{{ "skip" }}\n'
        "{% endif %}"
    ).render(env=os.environ)
)

也返回

do not skip
,但我期望
skip
。所以我认为它没有正确读取环境变量。

非常感谢有关如何正确使用 Jinja2 中的环境变量以及如何修复这个最小示例的任何帮助 - 谢谢!

python yaml jinja2
1个回答
0
投票

这里有几个问题 - 我认为你的跳过逻辑是倒退的,你的意图是正确的:

print(
    Template(
        "{% if env['SKIP'] %}\n"
        '{{ "skip" }}\n'
        "{% else %}\n"
        '{{ "do not skip" }}\n'
        "{% endif %}"
    ).render(env=os.environ)
)

其次,据我所知,在Python中,除了空字符串之外的所有字符串都将计算为真值。所以,举例来说,

if "False":
    print('hi')

将输出“hi”。

我相信你想要的是布尔值而不是

"False"
False

© www.soinside.com 2019 - 2024. All rights reserved.