在 Jinja2 中,如何测试变量是不是未定义?

Posted

技术标签:

【中文标题】在 Jinja2 中,如何测试变量是不是未定义?【英文标题】:In Jinja2, how do you test if a variable is undefined?在 Jinja2 中,如何测试变量是否未定义? 【发布时间】:2011-04-20 01:15:27 【问题描述】:

从 Django 转换,我习惯做这样的事情:

% if not var1 % % endif %

如果我没有将 var1 放入上下文中,它就会工作。 Jinja2 给了我一个未定义的错误。有没有简单的方式说% if var1 == None % 或类似的?

【问题讨论】:

【参考方案1】:

在环境设置中,我们有undefined = StrictUndefined,它可以防止将未定义的值设置为任何值。这修复了它:

from jinja2 import Undefined
JINJA2_ENVIRONMENT_OPTIONS =  'undefined' : Undefined 

【讨论】:

【参考方案2】:

来自 Jinja2 template designer documentation:

% if variable is defined %
    value of variable:  variable 
% else %
    variable is not defined
% endif %

【讨论】:

我认为是这种情况,但我的搜索字词通常不能反映这一点。 另外,您可以使用% if variable is not defined %来测试逆向。 @dannyman Since 0.2.0 % if variable is defined and variable % 也会检查是否为空【参考方案3】:

% if variable is defined % 用于检查是否有未定义的内容。

如果您将变量默认为 False,则可以使用 % if not var1 %,例如

class MainHandler(BaseHandler):
    def get(self):
        var1 = self.request.get('var1', False)

【讨论】:

【参考方案4】:

你也可以像这样在 jinja2 模板中定义一个变量:

% if step is not defined %
% set step = 1 %
% endif %

然后你可以这样使用它:

% if step == 1 %
<div class="col-xs-3 bs-wizard-step active">
% elif step > 1 %
<div class="col-xs-3 bs-wizard-step complete">
% else %
<div class="col-xs-3 bs-wizard-step disabled">
% endif %

否则(如果你不使用% set step = 1 %)上面的代码会抛出:

UndefinedError: 'step' is undefined

【讨论】:

【参考方案5】:

如果变量为None,则% if variable is defined % 为真。

既然not is None是不允许的,那就意味着

% if variable != None %

真的是你唯一的选择。

【讨论】:

如果variable 总是被评估为True 而不是None,则% if variable != None % 等价于% if variable % 如果你想检查None使用小写none% if variable is not none % @FelipeAlvarez 你有这方面的文档链接吗?提前致谢。 @ryanwebjackson 这是builtin test,称为none【参考方案6】:

如果需要,请考虑使用默认过滤器。例如:

% set host = jabber.host | default(default.host) -%

或在末尾使用更多带有“硬编码”的后备值,例如:

% set connectTimeout = config.stackowerflow.connect.timeout | default(config.stackowerflow.timeout) | default(config.timeout) | default(42) -%

【讨论】:

【参考方案7】:

我在 Ansible 中遇到过这样的问题。最终不得不对@Garret 和@Carsten / @azalea 的答案进行测试,所以:

% if variable is defined and variable %
    value of variable:  variable 
% else %
    variable is not defined or is falsy
% endif %

【讨论】:

以上是关于在 Jinja2 中,如何测试变量是不是未定义?的主要内容,如果未能解决你的问题,请参考以下文章

关于“环境变量未定义”的问题

变量是不是未定义[重复]

变量是不是未定义[重复]

使用 Jest 在 Nodejs 中测试 Azure 函数 - process.env 变量显示未定义

如何在 JEST 单元测试中修复“SVG 未定义”

如何判断字符串是不是未在 Bash shell 脚本中定义