在jinja2中针对未定义属性引发异常

9
我需要以下代码来抛出异常:
jinja2.Template("Hello {{ a.x }}").render(a={})

Jinja2在a.x未定义时会静默返回空字符串,所以渲染结果为"Hello "。

我该如何让jinja2在属性未定义时抛出异常?

2个回答

16
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

0
根据文档,你不能这样做,因为这个行为是一个特性:请参见此处
我会写一个自定义过滤器,以更符合 Python 的方式,如果出现问题,就会抛出KeyError异常。
可以使用类似以下的语法:
jinja2.Template("Hello {{ a|myget('x') }}").render(a={})

2
它实际上可以通过选择正确的“未定义”类(请参见我的答案)来完成。 - ascobol

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接