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 会自动识别,模板中常省略显式声明)。常见指令有:
-
<li>
tal:content —— 替换标签内容(如文本、属性值)
<li>
tal:replace —— 替换整个标签及其内容(含标签本身)
<li>
tal:attributes —— 动态设置或替换 HTML 属性(如
href, class)
<li>
tal:repeat —— 循环渲染子元素(类似 for 循环)
<li>
tal:condition —— 条件显示(布尔表达式为真时保留该元素)
<li>
tal:define —— 定义局部变量(供当前标签及子标签使用)
所有表达式都用 Python 表达式语法(在受限安全环境中执行),例如:python: request.get('id')、string:Hello ${user/name}(配合 METAL 或 TALES 字符串表达式)。
渲染动态内容:content 和 replace
假设你有一个用户对象 user,含 name 和 email 属性:
立即学习“前端免费学习笔记(深入)”;
<p tal:content="user/name">默认姓名</p>
登录后复制
→ 渲染为 <p>张三</p>(替换内容,保留 <p></p> 标签)
<span tal:replace="user/email">no-email@example.com</span>
登录后复制
→ 渲染为 zhangsan@example.com(整个 <span></span> 被替换,不留标签)
注意:tal:content 默认做 HTML 转义(防 XSS),如需原样输出 HTML,改用 structure:user/html_bio:
还木有评论哦,快来抢沙发吧~