我需要以下内容来引发异常:
jinja2.Template("Hello {{ a.x }}").render(a={})
Jinja2默默地为a.x
返回一个空字符串,因此呈现为“Hello”。
如何让jinja2在未定义的属性上引发异常?
答案 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={})