Jinja2模板变量如果为None对象则设置默认值

242
如何让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'

1
编写一个函数,使其返回p的值时不会返回None。该函数应该返回一个代理对象,该对象具有与真实对象相同的结构,但是它加载了您想要的默认值。 - Miguel Grinberg
1
我使用了这个代码,我的问题得到了解决: {% if p != None %} {{ p.User['first_name'] }} {% endif %} - Mona Mohamadinia
13个回答

0
我通过定义一个自定义过滤器来解决这个问题(在我的情况下,我需要处理None、False或空字符串的情况):
def __default_if_empty(value, default) :
    """Returns a default value if the given value evaluates to False."""
    return value if value else default

env = Environment(
    # Your config...
)
env.filters["default_if_empty"] = __default_if_empty

然后在模板中使用该过滤器:
{{ your_var | default_if_empty('') }}

-2

-2
您可以像下面的形式一样,简单地将“default none”添加到您的变量中:
{{ your_var | default('NONE', boolean=true) }}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接