项目和属性之间的区别 - Jinja,Python

fgh*_*fgh 5 python attributes items jinja2

我正在阅读Jinja 中的模板,特别是关于变量的内容。我想请您解释一下有关传递给 Jinja 语法对象的访问值的这句话:

执行

为了方便起见,Jinja2中的foo.bar在Python层做了以下事情:

  • 检查foo 上名为 bar 的属性(getattr(foo, 'bar'))

  • 如果没有,检查foo 中是否有项目“bar”(foo.__getitem__('bar'))

  • 如果不存在,则返回一个未定义的对象。

foo['bar'] 的工作原理基本相同,但顺序略有不同:

  • 检查foo 中的项目“bar”。(foo.__getitem__('bar'))

  • 如果没有,请检查foo 上是否有名为 bar 的属性。(getattr(foo, '酒吧'))

  • 如果不存在,则返回一个未定义的对象。

如果对象具有同名的项目和属性,这一点很重要。此外, attr() 过滤器仅查找属性。

项目和属性有什么区别?

PS - 如果相关的话:我从事字典工作。我刚刚读到Jinja可以使用键作为属性(dict.key)来访问值,但是在阅读这部分有关过程顺序的部分后我感到困惑。比较“键值”对使得理解上面的部分更具挑战性。

小智 3

在Python中,类实例具有属性;字典包含项目。在dict一个项目中是一个键和一个值的组合

a = object()
a.attribute = 'value'
b = dict()
b['key'] = 'value'
b.items()
Run Code Online (Sandbox Code Playgroud)