如何让Jinja2模板在对象无指定属性时渲染失败?
解决Jinja2访问不存在属性时抛出AttributeError的问题
要让Jinja2在访问对象不存在的属性时直接抛出AttributeError,只需修改环境配置启用严格未定义模式:
- 从Jinja2导入
StrictUndefined类 - 创建
Environment实例时,添加undefined=StrictUndefined参数
修改后的代码示例:
from jinja2 import Environment, PackageLoader, select_autoescape, StrictUndefined class Foo: pass env = Environment( loader=PackageLoader("mydistro"), autoescape=select_autoescape(), undefined=StrictUndefined ) t = env.get_template("template/path/to.j2") print(t.render(obj=Foo()))
当模板中引用{{obj.foo}}时,由于Foo类没有foo属性,渲染过程会直接抛出AttributeError,而非输出空内容。
默认情况下Jinja2使用Undefined类,会将未定义的变量/属性静默处理为空字符串;而StrictUndefined会强制触发异常,直接暴露这类错误。
内容的提问来源于stack exchange,提问作者badbishop
相关产品推荐
相关产品推荐

