使用常规python,我可以获得getattr(object, att)
但是在Jinja2中,我得到:
jinja2.exceptions.UndefinedError
jinja2.exceptions.UndefinedError: 'getattr' is undefined
我该如何使用它?
答案 0 :(得分:15)
Jinja2 不是Python 。它使用类似Python的语法,但没有定义相同的内置函数。
使用订阅语法;您可以在Jinja2中交替使用属性和订阅访问:
{{ object[att] }}
或者您可以使用attr()
filter:
{{ object|attr(att) }}
来自模板设计人员文档的Variables section:
除了标准的Python
.
“下标”语法(__getitem__
)之外,您还可以使用点([]
)来访问变量的属性。以下几行做同样的事情:
{{ foo.bar }} {{ foo['bar'] }}
并在同一部分中进一步说明实施细节:
foo['bar']
的作用大致相同,序列差异很小:
- 检查 foo 中的项目
'bar'
。 (foo.__getitem__('bar')
)- 如果没有,请在 foo 上检查名为 bar 的属性。 (
getattr(foo, 'bar')
)- 如果没有,则返回一个未定义的对象。