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

时间:2016-02-15 10:33:34

标签: python attributes jinja2

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

jinja2.exceptions.UndefinedError
jinja2.exceptions.UndefinedError: 'getattr' is undefined

我该如何使用它?

1 个答案:

答案 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')
  •   
  • 如果没有,则返回一个未定义的对象。
  •