如何将宏与金字塔/ZPT(变色龙)一起使用

2024-01-30

我想将宏与金字塔+ZPT引擎(Chameleon)一起使用。

文档说“单个页面模板可以容纳多个宏”。http://chameleon.readthedocs.org/en/latest/reference.html#macros-metal http://chameleon.readthedocs.org/en/latest/reference.html#macros-metal

因此我定义了一个文件macros.pt:

<div metal:define-macro="step-0">
  <p>This is step 0</p>
</div>
<div metal:define-macro="step-1">
  <p>This is step 1</p>
</div>

和一个全局模板main_template.pt所有 html 内容都定义了一个槽content.

和我的视图模板progress.pt它使用main_template.pt填写槽位:

<html metal:use-macro="load: main_template.pt">
  <div metal:fill-slot="content">
    ...
    <div metal:use-macro="step-0"></div>
    ...
  </div>
</html>

到目前为止,我痛苦地发现,我不能只是说use-macro="main_template.pt"因为 Chameleon 不会像 Zope 那样自动加载模板。因此我必须添加load:之前的片段。

来到use-macro="step-0"。这会引发 NameErrorstep-0。我尝试预加载macros.pt与类似的东西<tal:block tal:define="compile load: macros.pt" />但这没有帮助。

如何使用宏摘要文件中收集的宏?


要在 Pyramid 中使用 ZPT 宏,您需要通过将宏模板甚至宏本身传递到渲染模板(摘自文档)来使宏模板本身可用于渲染模板。

from pyramid.renderers import get_renderer
from pyramid.view import view_config

@view_config(renderer='templates/progress.pt')
def my_view(request):
    snippets = get_renderer('templates/macros.pt').implementation()
    main = get_renderer('templates/main_template.pt').implementation()
    return {'main':main,'snippets':snippets}

在渲染器将使用的模板中,您应该像这样引用宏。我假设 main_template.pt 中包含插槽“content”的宏名为“global_layout”。将其更改为您的名字。

<html metal:use-macro="main.macros['global_layout']">
  <div metal:fill-slot="content">
    ...
    <div metal:use-macro="snippets.macros['step-0']"></div>
    ...
  </div>
</html>

对模板内宏的引用如下所示:

<div metal:use-macro="template.macros['step-0']">
    <div metal:fill-slot="content">
        added your content
    </div>
</div>
<div metal:define-macro="step-0">
    a placeholder for your content
    <div metal:define-slot="content">
    </div>
</div>

要获取模板内的所有宏,以便将它们在视图内传递到呈现的模板中,请将此行添加到第一个代码示例并扩展返回的字典。

macros = get_renderer('templates/main_template.pt').implementation().macros

我可以解释更多,但请查看文档。这里描述了一个像上面这样的简单情况。

  • 在 Pyramid 中使用 ZPT 宏 http://docs.pylonsproject.org/projects/pyramid-chameleon/en/latest/#using-zpt-macros-in-pyramid

完整的教程也介绍了这个主题。第二个链接将增加您的知识。

  • 制作主模板 https://web.archive.org/web/20131018092639/http://docs.pylonsproject.org/projects/pyramid_tutorials/en/latest/humans/creatingux/step05/index.html
  • 可重复使用的模板宏 https://web.archive.org/web/20131018092639/http://docs.pylonsproject.org/projects/pyramid_tutorials/en/latest/humans/creatingux/step10/index.html

之后金字塔文档将提供更多详细信息。欢迎来到金字塔。

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

如何将宏与金字塔/ZPT(变色龙)一起使用 的相关文章

随机推荐

  • 如何在 stackdriver 中针对每个错误创建警报

    创建了基于日志的指标云控制台 https console cloud google com logs metrics 然后我想创建警报 以便每次有新的匹配日志条目时都会触发警报 在尝试创建合适的指标时 最有可能的选项似乎是阈值或变化率 但我
  • fancybox onStart onComplete 状态不起作用

    我正在努力继续工作onStart and onComplete方法使用FancyBox http fancybox net jquery 插件 我似乎无法让它为我工作 你们有人知道我做错了什么吗 这就是我现在正在尝试的 document r
  • 如何重置表中的身份

    我的情况是 我创建表为 id Identity 1 1 not null name varchar 500 category varchar 50 我尝试插入值 显示有 1 sede 糖尿病 结果是 1 2 3 但是当我删除全部内容时 再次
  • Android 中的转义“@”字符

    我正在寻找一种方法来转义 Android strings xml 资源中字符串开头的 符号 我不断收到编译错误 并且 Eclipse 中的布局构建器拒绝工作 有谁知道怎么办 字符景观取决于每个人 android文档提供了这个表https d
  • 如何查看Check Constraint的内容

    是否有一个 SQL 脚本可以让我查看约束的内容 我发现了一个有关 Oracle 的问题 但我需要一个 SQL 脚本 如何在Oracle上查看Check Constraint的内容 https stackoverflow com questi
  • intellij 2020.1 sbt mainRunner 配置

    我正在尝试遵循指示 https github com JetBrains intellij scala wiki 5BSBT 5D How to use provided libraries in run configurations用于设
  • Vue中如何通过Id获取元素?

    我想要一件外衣Element https developer mozilla org en US docs Web API Element在 Vue 中 使用getElementById https developer mozilla or
  • 安装 geoR 包时出现问题

    我刚刚在 Xubuntu 13 10 上安装了 R 和 R studio 版本 3 0 1 我想使用geoR包裹 但是 当我尝试安装它时 出现错误 install packages geoR 将软件包安装到 home R x86 64 pc
  • Java getter 与 this

    这是一个非常通用的场景 我使用 setter 函数设置变量并仅在本地使用该变量 class Main private String str public Main String value setStr value private Stri
  • 如何在 WCF 服务上设置密码?

    我正在开发一个 WCF 服务 我们的其他软件调用该服务将错误信息发送到我们的数据库 问题是 由于它是在线服务 所以它不安全 所以我想知道该服务是否可以请求密码 即当我们调用该服务时 我们必须配置密码或类似的东西 我用谷歌搜索了一下 但对于这
  • 尾递归Map函数RACKET

    Racket 中的映射函数采用一个函数和一个列表 并将该函数递归地应用于列表中的每个项目 我正在尝试将映射转换为尾递归函数 这该如何完成 你被困在哪里了 您可以定义自己的map程序与内部loop程序 define map f in defi
  • 如何在 Jetpack Compose for Desktop 中使用 .svg 文件?

    我正在尝试使用 svg 矢量文件 来显示图像 但我被卡住了 无法做到这一点 有什么办法可以使用它 我尝试像这样使用它 Image imageFromResource svg file name svg contentDescription
  • OpenCV 中从 3D 点构建平面

    我想从 OpenCV 中的 3D 点列表构造一个平面 我想通过查找以下形式的四个参数来获得结果 Ax By Cz D 0 有人会建议我一种方法吗 如果数据不包含异常值且不包含多个平面 此外 所有点都恰好位于一个平面上 数据没有噪声 就这么简
  • 将字典转换为元组列表

    如何以最短的方式将字典转换为元组列表 C Dictionary
  • 达到 MaxLength 时 XAML 触发自动制表符

    当 MaxLength 属性到达 XAML 触发器 DataTrigger PropertyTrigger Style Trigger 等时 如何合并自动制表符 下面是两个这样的选项 说明我如何通过代码隐藏使用 TextBox 完成此操作
  • Spring Boot RabbitMQ 接收器 Jackson 反序列化为 POJO

    我有一个 Spring Boot 项目 我正在尝试与 RabbitMQ 服务器集成 以便我可以向队列发布消息和从队列读取消息 这是我的rabbitmq配置 编辑后仅显示相关详细信息 Configuration ConfigurationPr
  • 运行 NestJS 应用程序时如何查看 console.log 输出?

    我正在构建我的第一个 NestJS 应用程序 我在他们的文档中看到很多使用 console log 的示例 但是当我添加它时 终端中没有输出 我正在使用 vscode 的终端 我还尝试使用内置 Logger 并使用 npm run star
  • MySQL 5.1 在存在索引时使用 filesort 事件

    也许我错过了一些愚蠢的事情 显然 即使有一个索引与 ORDER BY 子句中的列完全匹配 MySQL 5 1 也会继续执行文件排序 为了将其发布在这里 我过度简化了数据模型 但问题仍然发生 表定义 CREATE TABLE event id
  • 日期选择器对话框阴影的白色背景

    我将 datepicker 添加到我的应用程序中 但我的问题是对话框的阴影有白色背景 使用 Android 21 进行编译 请帮我删除白色背景 我有同样的问题 我所做的第一个解决方案 我最终在 DatePickerDialog 构建器中给出
  • 如何将宏与金字塔/ZPT(变色龙)一起使用

    我想将宏与金字塔 ZPT引擎 Chameleon 一起使用 文档说 单个页面模板可以容纳多个宏 http chameleon readthedocs org en latest reference html macros metal htt