在 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 中,如何测试变量是不是未定义?的主要内容,如果未能解决你的问题,请参考以下文章