在 Flask Web 框架中使用方括号或点符号有什么区别?两者似乎都有效,例如:
在Python脚本中我可以设置session['username'] = 'Geraint'
。然后我可以使用模板访问它{{ session['username'] }}
or {{ session.username }}
两者有什么区别?该文档似乎更喜欢点表示法,因此应该在all cases?
这是 Jinja2 的一个功能,请参阅变量 section http://jinja.pocoo.org/docs/dev/templates/#variables of the 模板设计器文档:
您可以使用点 (.
) 除了标准 Python 之外还可以访问变量的属性__getitem__
“下标”语法([]
).
这是一个方便特征:
为了方便起见,foo.bar
Jinja2中在Python层做了以下事情:
- 检查名为的属性bar on foo (
getattr(foo, 'bar')
)
- 如果没有,请检查是否有项目
'bar'
in foo (foo.__getitem__('bar')
)
- 如果不存在,则返回一个未定义的对象。
foo['bar']
工作原理基本相同,但顺序略有不同:
- 检查一个项目
'bar'
in foo. (foo.__getitem__('bar')
)
- 如果没有,请检查名为的属性bar on foo. (
getattr(foo, 'bar')
)
- 如果不存在,则返回一个未定义的对象。
如果对象具有同名的项目和属性,这一点很重要。此外,attr()
过滤器仅查找属性。
因此,如果您使用属性访问({{ session.username }}
)然后 Jinja2 会首先寻找属性,那么对于key。自从Flask session object http://flask.pocoo.org/docs/0.10/api/#flask.session是一本字典,这意味着你可能会得到错误的结果;如果您已在密钥下存储数据get
在会议上,session.get
返回一个字典方法,但是session['get']
将返回与关联的实际值'get'
key.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)