【发布时间】:2020-01-04 10:34:15
【问题描述】:
我正在阅读有关templates in Jinja 的信息,尤其是有关变量的信息。我想请你解释一下关于访问传递给 Jinja 语法对象的值的这句话:
实施
为方便起见,Jinja2 中的 foo.bar 做了以下操作 Python层的东西:
检查 foo 上名为 bar 的 属性 (getattr(foo, 'bar'))
如果没有,检查 foo 中的 item 'bar' (foo.__getitem__('bar'))
如果没有,则返回一个未定义的对象。
foo['bar'] 的工作方式大体相同,只是顺序略有不同:
检查 foo 中的 item 'bar'。 (foo.__getitem__('bar'))
如果没有,检查 foo 上名为 bar 的 属性。 (getattr(foo, 'bar'))
如果没有,则返回一个未定义的对象。
如果一个对象具有相同的项和属性,这很重要 姓名。此外,attr() 过滤器只查找属性。
item和attribute有什么区别?
PS - 如果相关:我从事字典工作。我刚刚读到Jinja 可以使用键作为属性(dict.key)来访问值,但是在阅读了关于进程顺序的这一部分后我感到困惑。比较“键值”对使理解上述部分更具挑战性。
【问题讨论】:
标签: python attributes jinja2 items