Zope的ZPT通过TAL属性(如tal:content、tal:replace、tal:repeat等)动态生成HTML/XML,不破坏文档结构,支持条件渲染、循环、变量定义及安全表达式,兼顾可预览性与服务端渲染。

Zope 的 ZPT(Zope Page Templates)使用 TAL(Template Attribute Language)来动态生成 XML/HTML 内容,核心思想是不破坏原有文档结构,仅通过添加属性实现逻辑控制。它不是嵌入代码块,而是用 tal:xxx 属性“修饰”标准 HTML/XML 标签,让模板既可被浏览器直接打开预览,又能被服务端安全渲染。
基础:TAL 属性怎么写?
TAL 指令作为 XML/HTML 标签的普通属性出现,命名空间通常声明为 tal="http://xml.zope.org/namespaces/tal"(Zope 会自动识别,模板中常省略显式声明)。常见指令有:
- tal:content —— 替换标签内容(如文本、属性值)
- tal:replace —— 替换整个标签及其内容(含标签本身)
-
tal:attributes —— 动态设置或替换 HTML 属性(如
href,class) - tal:repeat —— 循环渲染子元素(类似 for 循环)
- tal:condition —— 条件显示(布尔表达式为真时保留该元素)
- tal:define —— 定义局部变量(供当前标签及子标签使用)
所有表达式都用 Python 表达式语法(在受限安全环境中执行),例如:python: request.get('id')、string:Hello ${user/name}(配合 METAL 或 TALES 字符串表达式)。
渲染动态内容:content 和 replace
假设你有一个用户对象 user,含 name 和 email 属性:
立即学习“前端免费学习笔记(深入)”;
默认姓名
→ 渲染为 张三(替换内容,保留 标签)
no-email@example.com→ 渲染为 zhangsan@example.com(整个 被替换,不留标签)
注意:tal:content 默认做 HTML 转义(防 XSS),如需原样输出 HTML,改用 structure:user/html_bio:
动态属性与循环列表
给链接加动态 href 和 title:
查看资料
渲染用户列表(users 是序列):
- 示例名
tal:repeat 会复制 多次,每次绑定 user 变量;也可用 repeat/user/odd、repeat/user/index 等获取循环元信息。
条件与局部变量:condition 和 define
只对管理员显示操作按钮:
先定义再使用(避免重复计算):
姓名
支持链式定义:tal:define="a string:foo; b python:a.upper()"
XML 安全提示:命名空间与 CDATA
ZPT 原生支持 XML:只要模板是格式良好的 XML(如声明 ),TAL 属性可照常工作。但注意:
- XML 中不能用未转义的
、&—— 模板里写zuojiankuohaophpcn或包在里 - 自定义命名空间(如 SVG、MathML)需确保 TAL 属性不被 XML 解析器误判;Zope 会跳过非 HTML/XML 标准命名空间里的 TAL 属性,除非显式启用
- 若模板以
.xml后缀保存,Zope 默认按 XML 解析(更严格);.html则按宽松 HTML 模式
基本上就这些。TAL 的关键是“属性驱动、结构保全”,不用写 script 标签,也不用拼接字符串 —— 所有逻辑都在标签上,干净、可读、易维护。











