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

2024-04-27

在 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.barJinja2中在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(使用前将#替换为@)

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

随机推荐

  • 如何缩进现有 OCaml 代码

    我有大约 30 000 行缩进严重的 OCaml 代码 包括 mly 和 mll 文件 并且想要缩进它们 我尝试在谷歌上搜索 ocaml indent 的变体 我能得到的最接近的结果是使用 Omlet vim 并一次缩进一行代码 在插入模式
  • 我的 React 项目中 Firestore 数据库的读取次数非常多

    我正在使用 React 和 firebase firestore 制作一个简单的 CRUD 应用程序 我目前有一组 产品 有四条记录 主页循环显示产品 import React useEffect useState from react i
  • 如何从模板类中的方法返回 NULL

    我有一个如下所示的方法 template
  • 从恶意 PDF 中提取 JavaScript

    我有一个 PDF 文件 据我所知 它包含一个 JavaScript 脚本文件 该文件会执行恶意操作 但目前还不确定具体是什么 我已经成功解压缩了 PDF 文件并获得了纯文本 JavaScript 源代码 但它的代码本身隐藏在我以前从未见过的
  • 为什么 OpenSSL 给我一个“调用了不应调用的函数”错误?

    我正在努力向我的服务器程序添加 OpenSSL 支持 通常它运行得很好 但我遇到了一个问题 首先 一些背景知识 服务器是单线程的 使用非阻塞 I O 和 select 循环来同时处理多个客户端 服务器链接到 libssl 0 9 8 dyl
  • 如何在 OSX .pkg 中设置背景图像?

    我正在为我的 OSX 应用程序创建一个 pkg 安装程序 但我无法弄清楚如何设置背景图像 我在构建脚本中创建安装程序 如下所示 pkgbuild root APP FOLDER identifier com company product
  • 如何关闭 iOS 键盘?

    我有一个 UITextfield 我想关闭键盘 无论我使用什么代码 我似乎都无法让键盘消失 如果您有多个文本字段并且不知道哪个是第一响应者 或者您根本无法从编写此代码的任何位置访问文本字段 您可以调用endEditing 在包含文本字段的父
  • App Engine 日志中的 /_ah/queue/__deferred__

    我有一个使用 Google Cloud SQL 的 App Engine 应用程序 并且从我的应用程序的页面中我正在执行一些数据库操作 每当访问此页面时 它都无法执行所有数据库操作 当我进入控制台时 我看到的只是 ah queue defe
  • Selenium find_elements_by_css_selector 返回一个空列表

    我正在尝试选择包含以下内容的所有 idcoupon link关键字与以下脚本 from selenium import webdriver from selenium webdriver common keys import Keys dr
  • 如何在 Xamarin.Android 的 AXML 上启用智能感知?

    由于这个很棒的工具对所有人免费 我尝试了它 并且我喜欢它 尤其是 Visual Studio Android 模拟器 但是 我遇到了一个问题 因为 Visual Studio 智能感知根本不适用于 axml 文件 我尝试了这篇文章 http
  • 如何使用php取消设置mongodb中的所有记录字符串?

    我的数据库记录了这样的事情 id ObjectId 50118b145e69ef2c0e007a2 class customer dbid 1829 value email protected cdn cgi l email protect
  • Android Volley StringRequest 有时不工作

    我使用下面的代码从 API 获取一些本地视频 URL public void getVideoAds String serverURL String url http serverURL video StringRequest string
  • 如何将 Headless chrome 与水豚和硒一起使用

    Chrome版本 59 0 3071 104 使用Cucumber Capybara Selenium实现Headless Chrome的自动化测试 功能 支持 env rb require rubygems require capybar
  • 我们建议使用较新的 Android Gradle 插件来使用compileSdkPreview =“Tiramisu”

    我正在使用 Android Studio Dolphin 2021 3 1 JEtpack Compose 的 Canary 8 操作系统 Windows 10 最新版本 更新 Android Studio 后 我的 Preview 停止工
  • jQuery:追加到父级

    我似乎无法让appendTo 工作 我做错了什么 div nth child 2n img appendTo parent 当前标记 div class container img src 123 jpg p Hey p div div c
  • 将工作表合并为一张

    我有一些Excel工作表 其风格为 组织1 姓名 职业 克里斯 承包商 简 员工 组织2 姓名 职业 鲍勃 设施 Trey 软件开发人员 并希望将这些工作表合并到具有以下格式的主工作表中 组织名称 职业 1 克里斯 承包商 1 简 员工 2
  • 有没有办法在 JetBrains“运行配置”中仅运行“外部工具”

    JetBrains IDE 中的所有 或几乎所有 运行配置 都提供了一个选项来运行 外部工具 作为其执行的一部分 有没有办法only在运行配置中运行外部工具 不知道为什么你需要它 我可以建议尝试 Bash 支持插件 http plugins
  • 创建 .conll 文件作为斯坦福解析器的输出

    我想使用斯坦福解析器创建一个 conll 文件以进行进一步处理 到目前为止 我设法使用以下命令解析测试句子 stanford parser full 2013 06 20 lexparser sh stanford parser full
  • 是否可以附加到 DynamoDB 中的多值属性?

    是否可以附加到 Amazon DynamoDB 表中多值属性的值列表 我不太能够使用 put 请求弄清楚它 如果可能的话 我想避免读取 更新 写入逻辑 假设您指的是字符串和数字集如中所述Amazon DynamoDB 数据类型 https
  • Flask 模板中点表示法和方括号之间的区别

    在 Flask Web 框架中使用方括号或点符号有什么区别 两者似乎都有效 例如 在Python脚本中我可以设置session username Geraint 然后我可以使用模板访问它 session username or sessio