如何使一个变量在jijna2默认为“”如果对象是None而不是这样做?

      {% if p %}   
        {{ p.User['first_name']}}
      {% else %}
        NONE
      {%endif %}

所以如果对象p是None,我想默认值p (first_name和last_name)为“”。 基本上

nvl(p.User[first_name'], "")

错误接收:

Error:  jinja2.exceptions.UndefinedError
    UndefinedError: 'None' has no attribute 'User'

当前回答

为了避免在"p"或"p. user "为None时抛出异常,您可以使用:

{{ (p and p.User and p.User['first_name']) or "default_value" }}

其他回答

为了避免在"p"或"p. user "为None时抛出异常,您可以使用:

{{ (p and p.User and p.User['first_name']) or "default_value" }}

你可以简单地添加"default none"到你的变量中,如下所示:

{{ your_var | default('NONE', boolean=true) }}

如果你想设置自己的默认值而不是None,那么就简单地这样做

{{your_var |默认值:“缺省名称}}

除了其他答案,如果变量为None,可以写一些其他的东西,像这样:

{{ variable or '' }}

我通常定义一个nvl函数,并把它放在全局变量和过滤器中。

def nvl(*args):
    for item in args:
        if item is not None:
            return item
    return None

app.jinja_env.globals['nvl'] = nvl
app.jinja_env.filters['nvl'] = nvl

模板中的用法:

<span>Welcome {{ nvl(person.nick, person.name, 'Anonymous') }}<span>

// or 

<span>Welcome {{ person.nick | nvl(person.name, 'Anonymous') }}<span>