如何从 Jinja 2 模板获取当前变量列表?

2024-02-24

如果我像这样返回 Jinja2 模板:return render_response('home.htm', **context)

那么如何从模板中获取上下文中的变量列表?


从技术上讲,由于上下文不是作为命名字典传递的,因此需要做一些工作才能从模板内部生成上下文变量列表。但这是可能的。

  1. 定义一个Jinja 上下文函数 https://jinja.palletsprojects.com/en/2.10.x/api/#jinja2.contextfunction返回 jinja2.Context 对象,它本质上是全局变量/函数的字典

  2. 使该函数在全局命名空间中可用;即 jinja2.Environment 或 jinja2.Template 全局字典

  3. (可选)从上下文中过滤对象;例如,使用callable()跳过 Jinja 的默认全局辅助函数(范围、连接器等)。这可以在上下文函数或模板中完成;无论它最有意义。

Example:

>>> import jinja2
>>> 
>>> @jinja2.contextfunction
... def get_context(c):
...         return c
... 
>>> tmpl = """ 
... {% for key, value in context().items() %}
...     {% if not callable(value) %}
...         {{ key }}:{{ value }}
...     {% endif %}
... {% endfor %}
... """
>>> 
>>> template = jinja2.Template(tmpl)
>>> template.globals['context'] = get_context
>>> template.globals['callable'] = callable
>>>
>>> context = {'a': 1, 'b': 2, 'c': 3}
>>> 
>>> print(template.render(**context))
        a:1
        c:3
        b:2

[或者,致电render_response with ('home.htm', context=context)使其他解决方案发挥作用。]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Jinja 2 模板获取当前变量列表? 的相关文章

随机推荐

  • 如何使用 JSON 对象初始化 TypeScript 对象?

    我从对 REST 服务器的 AJAX 调用接收到一个 JSON 对象 该对象具有与我的 TypeScript 类匹配的属性名称 这是这个问题 https stackoverflow com questions 22875636 how do
  • Laravel 迁移到 mix 会删除无效的 NODE_OPTIONS 环境变量:不允许 --openssl-legacy-provider

    当我运行yarn run dev时 它编译没有任何问题 但是当我运行yarn run prod时 出现以下错误 Mix Compiled with some errors in 21 47s ERROR in js app js js ap
  • Selenium Webdriver C# element.Enabled 当元素仍处于禁用状态时评估为 true

    我的自动化测试过去运行顺利 但我们将 QA 环境移至不同的服务器 现在测试失败 因为它不断尝试单击仍在加载且变灰 禁用的元素 以下是在以前的服务器上运行良好的部分代码 while less than 7 seconds if driver
  • Angular2/Ionic2 中的 Google Drive APIgapi.client.drive

    我编写 Angular2 Ionic2 应用程序来显示列表并将文件上传到 Google Drive 使用 Google 登录工作正常 但是gapi client drive未定义 我应该做什么来解决它或者有方法代替 我安装了 npm ins
  • 重用意图安全吗?

    Android 文档将 Intent 定义为 包含要执行的操作的抽象描述的信息包 这表明您应该能够在需要时多次重用单个 Intent 对象 但我还没有看到任何示例表明这种情况 可以安全执行 是否有任何理由不执行以下操作 private fi
  • C# 运行时错误:“DataGridViewComboBoxCell 值无效”

    我花了一天的大部分时间来解决这个问题 但解决方案仍然困扰着我 我的 Winform 应用程序包含一个DataGridView其中两列是ComboBox下拉列表 奇怪的是 DataGridView似乎填充正确 但在填充时或每当有鼠标悬停或看似
  • 仅运行 ansible playbook 中的一项任务和处理程序

    如何从 Ansible playbook 运行单个任务以及在该任务成功完成时收到通知的处理程序 同时跳过相关 playbook 中的所有其他任务 目前我执行以下操作 ansible playbook start at task task1
  • 在空手道和放心之间选择

    尝试在 Karate 框架和 Rest Assured 之间进行选择以实现 API 自动化 其中包括 Rest API 和 GraphQL 我们还可以增强框架来执行 UI 自动化 我经历了寻找的一般过程 Karate 是为 GraphQL
  • Google Drive API 进度条错误

    我编写了以下代码来将文件上传到我的 Google 云端硬盘帐户 它工作得很好 然后我尝试添加一些上传进度跟踪器 但遇到了一些问题 它可以工作 但进度几乎立即达到 100 远远早于上传完成 export async function uplo
  • 使用常量引用删除引用

    对于参数类 C 我希望始终获得 原始 类型 而不管指针 const 或引用修饰符如何 template
  • (gcloud.app.deploy) 错误响应:[13] 意外错误

    当我尝试将 Spring Boot 应用程序部署到谷歌云时 出现以下错误 gcloud app deploy Error Response 13 Unexpected Error 我正在使用 com google cloud tools a
  • 提交PHP后保留表单中的值

    我从控制器调用这些函数来获取表单和表单中的值 我的问题是 提交失败后如何保留表单中的值 我尝试过这样的事情
  • Apache Spark 在分区数量较少时内存不足

    我有一个Spark应用程序总是内存不足 集群有两个节点 RAM大约30G 输入数据大小大约几百GB 该应用程序是一个 Spark SQL 作业 它从 HDFS 读取数据并创建一个表并缓存它 然后执行一些 Spark SQL 查询并将结果写回
  • C libpcap API 提取 DNS 查询

    我正在尝试使用 libpcap api 从捕获的 DNS 数据包中提取 DNS 查询 但是我的结构一定有问题 在最后一次转换 使用结构问题 之后char name指针指向正确的地址 查询名称的开头 但它只包含 42 45 20 00 但应该
  • 向客户端发送数据(数据是一个有大原型的对象)

    想要更新一个使用迄今为止创建的所有聊天室列表登录的新客户端 假设我做了这样的事情 每次有人加入应用程序时 socket emit updateClient rooms rooms是一个对象 由许多组成room的实例Room对象本身很小 但有
  • 如何将数据导入rails?

    我有一个带有 User 类的 Rails 3 应用程序 以及一个我想要导入的制表符分隔的用户文件 如何在 Rails 控制台之外访问 Active Record 模型 以便我可以编写脚本来执行以下操作 require active reco
  • 叠加两个或多个位图以在 Picturebox 中显示 (C#)

    在我的 C 程序中 我有一个 Picturebox 我想在其中显示视频流 连续帧 我收到原始数据 然后将其转换为位图或图像 我可以一次显示一张图像 没有问题 重现视频流 现在我的问题是我想要合并 2 个或多个具有相同大小和 alpha 值
  • 如何使用 StAX XML 解析器捕获属性事件?

    我尝试使用 StAX XML 解析器解析 XML 文件 它给我START ELEMENT and END DOCUMENT事件但没有ATTRIBUTE事件 我怎样才能收到ATTRIBUTE使用 StAX 解析器的事件 My XML
  • 验证错误后,后续 ajax 请求从 UI 组件获取值,而不是从 Bean 获取值

    在我基于 JSF 2 的应用程序中 我有一个表单 其中包括 以及其他 UI 组件 一些复选框 在复选框上 我注册了 ajax 请求 在选中它们时会触发这些请求 ajax 请求实际上只会更新支持 bean 中另一个复选框的值 因此 另一个复选
  • 如何从 Jinja 2 模板获取当前变量列表?

    如果我像这样返回 Jinja2 模板 return render response home htm context 那么如何从模板中获取上下文中的变量列表 从技术上讲 由于上下文不是作为命名字典传递的 因此需要做一些工作才能从模板内部生成