在Karrigell中使用Cheetah模板引擎

在传统的web开发中,如ASP,JSP,PHP,PSP都是把脚本代码与HTML代码混合,使得业务逻辑与页面逻辑混合在一起。这就会造成一系统的问题如可读性较差维护起来也是非常头疼,经常在隔了一段时间后看不懂自己写的代码,出现了页面设计人员与程序开发人员的交叉分工作业冲突。 

现在在JSP与PHP世界中出现了许多优秀的模板引擎,如JSP中的Webmacro/Velocity和PHP中的Smarty。在Python中也有不下20中的模板系统,Python最新版本中就集成了一个简单的模板系统,并且在众多的Python web framework也大都集成有自己的模板引擎如django。而在Karrigell中,虽然Python InSide HTML可以被当作模板系统使用但是由于缩排问题与效率低下的原因而不被经常使用。现在Karrigell的2.X发行包已经把Cheetah当作标准模块发布了。下面我们就介绍一下在Karrigell中如何使用PIH与Cheetah模板系统。

那么模板系统的作用是什么呢?模板系统的目标是将文档的动态部分与其静态部分分离。我们在Python中使用模板系统就要迫使编程人员与UI设计人员首先要选择模板系统,不过我在这里推荐使用Cheetah,Cheetah的设计理念是:Python适用于后端,Cheetah适用于前端。如果我们遵循这条法测的话,使用Karrigell+SQLObject+Cheetah就可以组合成一个类似于TruboGears的MVC框架

使用Python Inside Python

我们在这里介绍一个Karrigell官方文档里一个PIH作为模板使用的例子(中文参考地址:http://blog.csdn.net/ChumpKlutz/archive/2007/10/02/1810012.aspx

PIH脚本可以在Karrigell server外用于创建HTML文件,把它当作"模板系统"。

例如,下面的这个HTML文档是一个PIH脚本。chapter号码不是固定的但是可以像这样插入到HTML中:

<h1><%= chapter %>. Python Inside HTML</h1>

为了从一个PIH脚本中处理HTML,可以使用Template模块,可以使用getScript(fileName)函数创建一个脚本的实例,然后应用它的render(nameSpace)方法,传递当前名字空间(通常是globals()或locals())它将会发现需要的变量。render方法返回一个Output实例,它的value属性就是返回的HTML结果:

import Template
pihIn=Template.getScript("pythoninsidehtml.pih")
chapter=5
htmlOutput=pihIn.render(globals()).value

当然我们也可把上面代码的最后一行改造成:htmlOutput=pihIn.render({'chapter':5}).value

使用Cheetah模板系统

Cheetah是一个用Python写的模板系统与代码生成工具。Cheetah提供了一门简单语言,用来定义提供基本流控制和对象访问的构造模板。

首先我们来看一个简单的例子:

1)在rootDirectory目录下(默认是webapps目录)创建一个Cheetah模板文件hello.tmpl,内容如下:

    <H1>Hello $name</H1>

2)在上面所提到目录下面创建文件index.ks,内容如下:

    from Cheetah.Template import Template
    def index():
           t=Template(file='hello.tmpl',searchList=[{'name':'ChumpKlutz'}])
           print t

3)这时我们访问http://localhost/index.ks/index看看浏览器上显示了什么

下面我们来看一个稍微复杂的例子:

1)在rootDirectory目录下(默认是webapps目录)创建一个Cheetah模板文件list.tmpl,内容如下:

     <H1>Contract List<H1>
     <HR>
    <TABLE>
        <TR>
       <TH>My Friends Name</TH>
       </TR>
       #for $listItem in $CList:
              <TR>
              <TD>$listItem</TD>
              </TR>
        #end for
   </TABLE>

2)在上面所提到目录下面创建文件index.ks,内容如下:

     from Cheetah.Template import Template
     MyList=['ChumpKlutz','Jacky Yin','Amy Hu','Jason Zhang','Bill Cheng']
    def index():
           t=Template(file='list.tmpl',searchList=[{'CList':MyList}])
           print t

3)这时我们访问http://localhost/index.ks/index看看浏览器上显示了什么

Cheetah提供了很多的流程控制语句如while,break,continue,if等。在Cheetah中还可以设置过滤器,可以使用临时变量,还可以使用import语句导入某个模块然后使用其中的类与方法就像标准的Python脚本一样。更高级的特性请参见Cheetah的官方网站:http://www.cheetahtemplate.org/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值