Flask模板中的点表示法和方括号之间的区别

时间:2015-04-17 15:15:35

标签: python flask jinja2

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

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

访问模板

两者之间的区别是什么?文档似乎更喜欢点符号,所以应该在所有案例中使用吗?

1 个答案:

答案 0 :(得分:3)

这是Jinja2的一项功能,请参阅模板设计器文档的Variables section

  

除了标准的Python .“下标”语法(__getitem__)之外,您还可以使用点([])来访问变量的属性。

这是便利功能:

  

为方便起见,Jinja2中的foo.bar在Python层上执行以下操作:

     
      
  • foo getattr(foo, 'bar'))上检查名为 bar 的属性
  •   
  • 如果没有,请在 foo 'bar'
  • 中检查项目foo.__getitem__('bar')   
  • 如果没有,则返回一个未定义的对象。
  •   
     

foo['bar']的作用大致相同,序列差异很小:

     
      
  • 检查 foo 中的项目'bar'。 (foo.__getitem__('bar')
  •   
  • 如果没有,请在 foo 上检查名为 bar 的属性。 (getattr(foo, 'bar')
  •   
  • 如果没有,则返回一个未定义的对象。
  •   
     

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

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