jinja2忽略取值None

在jinja2的模板中取值{{a.b.c}},
如果a为None的话会跑错误:'None' has no attribute 'a',
能否配置为即使a为None了也能够继续执行下去,使得最后得到None或者其他空着都行。

阅读 5.1k
2 个回答

继承Environment,重写getitem和getattr方法

from jinja2 import Environment
from jinja2.utils import Markup
from jinja2.runtime import Undefined
class ExEnvironment(Environment):
    def getitem(self, obj, argument):
        v = Environment.getitem(self, obj, argument)
        return None if isinstance(v, Undefined) else v
    def getattr(self, obj, attribute):
        v = Environment.getattr(self, obj, attribute)
        return None if isinstance(v, Undefined) else v
jinjaven = ExEnvironment()

后面用jinjaven去做渲染环境就行。

加个判断吧

{% if a%}{{a.b.c}}{%endif%}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题