在Jinja2中使用getattr给出了一个错误(jinja2.exceptions.UndefinedError:'getattr'未定义)

som*_*ier 9 python attributes jinja2

使用常规python,我可以得到getattr(object, att)但是在Jinja2中,我得到:

jinja2.exceptions.UndefinedError
jinja2.exceptions.UndefinedError: 'getattr' is undefined
Run Code Online (Sandbox Code Playgroud)

我怎么用呢?

Mar*_*ers 17

Jinja2 不是Python.它使用类似Python的语法,但没有定义相同的内置函数.

请改用订阅语法; 您可以在Jinja2中交替使用属性和订阅访问:

{{ object[att] }}
Run Code Online (Sandbox Code Playgroud)

或者你可以使用attr()过滤器:

{{ object|attr(att) }}
Run Code Online (Sandbox Code Playgroud)

从模板设计器文档的Variables部分:

.除了标准的Python __getitem__"下标"语法([])之外,您还可以使用dot()来访问变量的属性.

以下几行做同样的事情:

{{ foo.bar }}
{{ foo['bar'] }}
Run Code Online (Sandbox Code Playgroud)

并在同一部分中进一步说明实施细节:

foo['bar'] 工作方式大致相同,顺序差异很小:

  • 检查项目'bar'FOO.(foo.__getitem__('bar'))
  • 如果没有,请检查foo上名为bar的属性.()getattr(foo, 'bar')
  • 如果没有,则返回一个未定义的对象.