gpt4 book ai didi

python - Flask 模板中点符号和方括号之间的区别

转载 作者:太空宇宙 更新时间:2023-11-04 10:25:17 25 4
gpt4 key购买 nike

在 Flask web 框架中使用方括号或点符号有什么区别?两者似乎都有效,例如:

在 Python 脚本中,我可以设置 session['username'] = 'Geraint'。然后我可以使用 {{ session['username'] }}{{ session.username }}

访问模板

两者有什么区别?文档似乎支持点符号,所以应该在所有 情况下使用点符号吗?

最佳答案

这是 Jinja2 的一个特性,参见 Variables section Template Designer 文档:

You can use a dot (.) to access attributes of a variable in addition to the standard Python __getitem__ “subscript” syntax ([]).

这是一个方便的功能:

For the sake of convenience, foo.bar in Jinja2 does the following things on the Python layer:

  • check for an attribute called bar on foo (getattr(foo, 'bar'))
  • if there is not, check for an item 'bar' in foo (foo.__getitem__('bar'))
  • if there is not, return an undefined object.

foo['bar'] works mostly the same with a small difference in sequence:

  • check for an item 'bar' in foo. (foo.__getitem__('bar'))
  • if there is not, check for an attribute called bar on foo. (getattr(foo, 'bar'))
  • if there is not, return an undefined object.

This is important if an object has an item and attribute with the same name. Additionally, the attr() filter only looks up attributes.

因此,如果您使用属性访问 ({{ session.username }}),那么 Jinja2 将首先查找属性,然后是。自 Flask session object是一本字典,这意味着您可能会得到错误的结果;如果您在 session 中的键 get 下存储了数据,session.get 返回一个字典方法,但是 session['get'] 会返回与 'get' 键关联的实际值。

关于python - Flask 模板中点符号和方括号之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29703154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com