ZPT教程之一:Hello world!

写在前面的话:

由于项目的关系,最近要去学习一些Zope的模板式编程方法ZPT。可能因为Zope这一套体系还是应用比较少的缘故吧,网上鲜有相关学习资料,连非官方的英文资料都只找到一个ZPT  basics开头的四篇系列文章,更别说中文的了。Zope的官网上资料确实比较全,但是给零Zope基础的人来看,似乎也不太轻松。没办法,总得有一个第一个吃螃蟹的不是,体会到了没有入门资料可找的苦处,我觉得更有必要贡献一份中文入门教程,如果真能帮助到也需要研究ZPT的人,那我就不胜荣幸了。
在此我得首先鸣谢ZPT basics系列文章的作者Harish Kamath,我就是看它的文章入门的,本系列教程中有一些示例还是直接从它的文章中移植过来。那么,下面就进入正题啦!


ZPT教程之一:Hello world!

1.      ZPT简述

ZPT全称为Zope Page Template,官方网站将其描述为“一种嵌入命名空间、可提供方法让设计与内容分开的与XML兼容的标记语言”。它的模板化相较于传统的动态嵌入式语言,将更多的体现在编译期渲染期过程。其实ZPT只是一个带有集合性质的抽象概念,它包括三个核心部分:TAL,METAL,TALES。在这里我们只会对它们作初步介绍,方便初学者理解它们的定位。在后续的教程中,我们将会对这三个部分作更详细的解释和研究。

2.      ZPT三元素

2.1.  TAL

TAL全称为Template Attribute Language。它使用tal命名前缀,就像html 标签的属性一样使用。但是一般的浏览器并不会去解析这些tal属性,而是直接把它们忽略掉。所以一个ZPT模板文件可能在一般的浏览器中就是像正常的页面一样被显示。它是ZPT核心中的核心,可以完成替换、循环、判断、定义变量等主要工作。

2.2.  METAL

METAL全称为Macro Expansion Template Attribute Language。正如其名,它的作用很单一,简单来说就是负责宏定义,但是可不要认为作用单一就代表着作用不大哦!

2.3.  TALES

TALES全称为Template Attribute Language Expression Syntax,即模板标记语言表达式语法。按照我浅薄的理解,我们可以把它在ZPT中的地位与HTML DOM在HTML中的地位等价。它设定了ZPT中的表达式写法。如request/form/size就代表了上一个页面通过POST方式传入的size参数,template/id就代表了本模板页的ID号,python:10 * 34 代表10与34的乘积等。

3.      初识ZPT

先来看看下面这一段代码:

My name is <b tal:content="template/id">template id</b>.

如果我们有一个ID为ThankCreate的模板页,那么经过渲染之后(好吧,我承认 “渲染”这个词用在这里似乎不太恰当,但一时也找不到啥更好的词来取代它了),则会生成如下的输出:

My name is <b>ThankCreate</b>.

标签之间的内容被替换为了页面的ID。

这个例子中包含了ZPT三大核心部分之二:TAL,TALES。tal:content=””是一个常用的tal用法,其意即为将其标签下的内容置换为它所指定的内容。template/id则是一个典型的tales,它标名了当前模板的ID号。在这里,我们暂且不对tal和tales作过多的说明,只求读者对它们有个初步印象。

下面我们再来看看更复杂一点的用法。

在页面设计中,我们可能经常会碰到要动态的生成一个行数不定的报表的问题。在传统的JSP页面中可能会这样实现:

<% for(i=0;i<Book.getAllBooks.size();i++) {%>
<tr>
<td><%=Book.getAllBooks.get(i).getBookName()%></td>
</tr>
 <%}%>

然而,这种在百分号之间强行嵌入控制语句的行为是否让你觉得不太优美?

且看在ZPT中将如何实现:

<tr tal:repeat=”book python:’Thinking in C++’, ‘Yearbook of Dian 2010 ’, ‘Effective  C ++’ ”>
     <td tal:content = “book”>The text here is not important</td>
</tr>

最后输出结果为

<tr>
<td> Thinking in C++</td>
</tr>
<tr>
<td> Yearbook of Dian 2010</td>
</tr>
<tr>
<td> Effective  C ++</td>
</tr>

可见tal:repeat方法提供了与一般编程语言中的for或while的作用。什么?你说你看到python这个关键字了?没错,这也是ZPT的一大特点—-借鉴嵌入式的python语句增强其表现力。同样,也请读者看到这里时不要对repeat作深究,后续教程中自有解读。

4.      部署Zope开发环境

俗话说光说不练假把式,下面我们就来看看如何跑起我们的第一个ZPT模板页吧。

首先,我们得部署好我们的Zope开发环境。可能还有朋友搞有点疑惑了,刚刚不是一直在说ZPT吗?怎么又早冒出个Zope了?Zope是一个开放源代码的Web应用服务器,它提供了一个强大的Web管理页面,使得我们仅仅借助于浏览器就可以完成网站的部署等工作,ZPT页面也是需要经过它的渲染才能成为模板与数据结合后生成的页面。

下载Zope请至

http://www.zope.org/Products/

笔者目前的版本为2.11.4  (for i386)

安装过程会提示让你设定密码,此密码将作为登陆Zope管理页面的管理员密码,用户名强制为admin。

友情提示:记得勾选“让Zope实例注册为Windows服务”的选项,省得手动去开启。

按照正常流程走完后,当你在浏览器中输入http://localhost:8080/manage ,如果一切顺利的话,你将得到一个提示你输入用户名和密码的页面,输入刚刚安装中让你设定密码,你将会看到如下页面:

注意,右上角标红的下拉列表将成为我们频繁光顾的对象。

刚进去时是在根文件夹下的,为操作方便起建,我们建立一个名为1的文件夹(好吧,请尽情 BS我的命名风格)

单击左侧面板中新生成的“1”文件夹。在下拉列表中选择Page Template, 在自动弹出的页面中设置模板ID为HellowWorld, Title为Welcome to my first ZPT page!

将以下内容输入到页面编辑窗口:

<html>
  <head>
    <title tal:content="template/title">The title</title>
  </head>
  <body>
    <span tal:replace="template/title">
           optional template title
    </span>
    <br>
    This is Page Template <em tal:content="template/id">template id</em>.
  </body>
</html>

保存所做的修改后,点击最上方的“Test”链接(最好在新页面中打开,否则看不到title标签的效果,不过看不到也似乎没什么影响,嘿嘿),怎么样?大功告成矣!

Welcome to the my first ZPT page
This is Page Template HelloWorld.

相信不少读者在看到模板页的原始码时已经能猜到生成后的页面是什么样子了,我在这里只多作一点说明。tal:content和tal:replace的作用差不多,但是content只会把标签之内的内容替换,而replace会把内容连带其<>标签整个替换掉。


5.      小结

这是我ZPT系列教程的第一篇,鄙人本身也是ZPT体系的初学者,文笔更是拙劣,能坚持看到这里的读者我真是佩服不尽。到此为止,相信大家对ZPT页面的语法有了一个最原始的概念,但是对TAL,TALES,METAL这三大核心还是不甚了解,别急,且看后续教程慢慢分解。

原作者 : ThankCreate

Blog : www.thankcreate.com

转贴请注明出处,支持原创,感激不尽。

4 thoughts on “ZPT教程之一:Hello world!

发表评论

电子邮件地址不会被公开。 必填项已用*标注