4

我的代码中的许多模型都具有可以为无的关系。None很多时候,这需要在访问数据之前进行检查:

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

如果我不添加该检查,则页面会因未定义错误而完全中断。从 Flask 应用程序运行时,有什么方法可以让 Jinja2 中的 UndefinedErrors 静默失败?

4

1 回答 1

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()
于 2013-02-08T02:31:22.183 回答