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

use*_*114 6 python jinja2

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

jinja2.Template("Hello {{ a.x }}").render(a={})
Run Code Online (Sandbox Code Playgroud)

Jinja2以静默方式返回一个空字符串a.x,因此呈现为"Hello".

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

asc*_*bol 8

from jinja2 import Template, StrictUndefined
print Template("Hello {{ a.x }}", undefined=StrictUndefined).render(a={})
Run Code Online (Sandbox Code Playgroud)

这将引发异常:

File "<template>", line 1, in top-level template code
jinja2.exceptions.UndefinedError: 'dict object' has no attribute 'x'
Run Code Online (Sandbox Code Playgroud)

如果为ax设置一个值,那么它将按预期工作:

print Template("Hello {{ a.x }}", undefined=StrictUndefined).render(a={'x':42})
Run Code Online (Sandbox Code Playgroud)

将打印:

Hello 42
Run Code Online (Sandbox Code Playgroud)