我需要以下内容来引发异常:
jinja2.Template("Hello {{ a.x }}").render(a={})
Jinja2 默默地返回一个空字符串a.x
,所以它呈现为“Hello”。
如何让 jinja2 在未定义的属性上引发异常?
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
根据文档,您不能这样做,因为该行为是一项功能:请参见此处
我要做的是编写一个自定义过滤器,该过滤器以pythonic方式表现得更多,并引发一个KeyError
以防万一。
或多或少可以使用的东西,例如:
jinja2.Template("Hello {{ a|myget('x') }}").render(a={})