在jinja2中为未定义的属性引发异常

时间:2013-07-02 20:06:21

标签: python jinja2

我需要以下内容来引发异常:

jinja2.Template("Hello {{ a.x }}").render(a={})

Jinja2默默地为a.x返回一个空字符串,因此呈现为“Hello”。

如何让jinja2在未定义的属性上引发异常?

2 个答案:

答案 0 :(得分:8)

from jinja2 import Template, StrictUndefined
print Template("Hello {{ a.x }}", undefined=StrictUndefined).render(a={})

这将引发异常:

File "<template>", line 1, in top-level template code
jinja2.exceptions.UndefinedError: 'dict object' has no attribute 'x'

如果您为a.x设置了值,那么它将按预期工作:

print Template("Hello {{ a.x }}", undefined=StrictUndefined).render(a={'x':42})

将打印:

Hello 42

答案 1 :(得分:1)

根据文档,您不能,因为该行为是一项功能:请参阅here

我要做的是编写一个自定义过滤器,以pythonic方式表现更多,并在案件中引发KeyError

可以或多或少地使用的东西:

jinja2.Template("Hello {{ a|myget('x') }}").render(a={})