2013-02-03 10 views
4

我的代码中的很多模型的关系可以是None。很多时候,这需要None检查访问数据之前:如何让Jinja2将所有UndefinedError异常转换为空白字符串?

{% if foo.bar %} 
    {{ foo.bar.baz }} 
{% endif %} 

如果我不与UndefinedError添加检查,分页符完全。从Flask应用程序运行时,有没有什么办法可以让Jinja2中的UndefinedErrors默默地失败?

回答

8

只需创建的jinja2.Undefined一个子类,返回本身的属性访问并且通过覆盖create_jinja_environment方法将其设置为未定义类型为您的环境:

from flask import Flask 
from jinja2 import Undefined 
from werkzeug.datastructures import ImmutableDict 

class MalleableUndefined(Undefined): 
    def __getitem__(self, key): 
     return self 

    def __getattr__(self, key): 
     return self 


class CustomFlask(Flask): 
    def create_jinja_environment(self): 
     self.jinja_options = ImmutableDict(undefined=MalleableUndefined, **self.jinja_options) 
     return super(CustomFlask, self).create_jinja_environment() 
+0

很抱歉,如果我失去了一些东西,但我该如何申请这个未定义的属性为我的{{variable}}? – chishaku

+0

@chishaku - 只需使用CustomFlask子类而不是普通的Flask类创建应用程序。 –

+0

啊,明白了。谢谢。 – chishaku

相关问题