8

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

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

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

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

4

2 回答 2

13
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'

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

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

将打印:

Hello 42
于 2013-11-16T13:33:39.433 回答
0

根据文档,您不能这样做,因为该行为是一项功能:请参见此处

我要做的是编写一个自定义过滤器,该过滤器以pythonic方式表现得更多,并引发一个KeyError以防万一。

或多或少可以使用的东西,例如:

jinja2.Template("Hello {{ a|myget('x') }}").render(a={})
于 2013-07-02T20:20:19.447 回答