mako模板的安装及整合到tornado

Mako是用python语言开发的开源模板引擎,功能很强大,使用起来也很方便,下面介绍一下安装步骤:
  1. 下载:请到官方网站http://www.makotemplates.org/,或者点击链接下载http://www.makotemplates.org/downloads/Mako-0.2.5.tar.gz  
  2. 解压:tar zxvf Mako-*  
  3. 进入文件目录,运行以下命令:
    sudo python setup.py install   
  4. 安装完成,到你的python安装目录下的site-packages目录里检查Mako-0.2.5-py2.6.egg文件是否存在,如果存在即代表安装成功了

  5. 测试程序Helloword
    1)运行命令python进入python运行环境

    2)输入以下python代码进行测试
    from
     mako.template
     import
     Template
    
    
    mytemplate
     =
     Template
    (
    "hello, ${name}!"
    )
    
    print
     mytemplate
    .
    render
    (
    name
    =
    "sand"
    )
    
    
    3)如果你在屏幕上看到了hello, sand!的输出代表你安装成功了







 tornado是一个优秀的python的开源web 框架,框架本身的性能确实很好,但是他自带的模版只能说是一般般。关于tornado的详细信息可以直接到管网参考。

  http://www.tornadoweb.org/en/stable/

  Mako是python的一个优秀的模版引擎,其性能在模版引擎中排名比较靠前的,关于Mako,Django,Tornado等这些模版的性能比较,可以直接Google一下,不过貌似都是一篇博客被各种转载,当然可以照这他的源代码自己运行一下来判断。Mako的管网。http://www.makotemplates.org/ 对其又详细的介绍。

  sudo pip install Mako 即可安装。

  Tornado更换模版引擎比较简单,只需要重写 def render_string(self, template_path, **kwargs) 和def render(self, template_path, **kwargs)

完整代码如下:

复制代码
 1 #-*- coding: utf-8 -*-
 2 import tornado.web
 3 import os.path
 4 import tornado.ioloop
 5 import mako.lookup
 6 import tornado.httpserver
 7 import mako.template
 8 
 9 class BaseHandler(tornado.web.RequestHandler):
10 
11 
12     def initialize(self):
13         template_path = self.get_template_path()
14         self.lookup = mako.lookup.TemplateLookup(directories=[template_path], input_encoding='utf-8', output_encoding='utf-8')
15         #self.lookup = mako.lookup.TemplateLookup(directories=[template_path])
16 
17     def render_string(self, template_path, **kwargs):
18         template = self.lookup.get_template(template_path)
19         namespace = self.get_template_namespace()
20         namespace.update(kwargs)
21         return template.render(**namespace)
22 
23     def render(self, template_path, **kwargs):
24         self.finish(self.render_string(template_path, **kwargs))
复制代码

在 def initialize(self)中 定义了模版的搜索路径,其中模版的搜索路径只在Application的settings中设定的,self.get_template_path()可以获得。

在render_string(self, template_path, **kwargs)中,首先通过get_tempalte(tempalte_path)函数获取模版实例,然后通过get_template_namespace()获取系统定义的一些变量。以字典存储,最后根据用户传递的变量,扩展namespace,直接调用模版的render(**namespace)方法直接输出。

render(self, template_path, **kwargs) 方法比较简单,只调用了self.finish()犯法, finish()方法会调用write(chunk) 响应的。

  这样,我们就完成了Mako和Tornado的集成,下面是一个简单是示例:

main.py

复制代码
 1 #-*- coding: utf-8 -*-
 2 import tornado.web
 3 import os.path
 4 import tornado.ioloop
 5 import mako.lookup
 6 import tornado.httpserver
 7 import mako.template
 8 
 9 
10 class BaseHandler(tornado.web.RequestHandler):
11 
12 
13     def initialize(self):
14         template_path = self.get_template_path()
15         self.lookup = mako.lookup.TemplateLookup(directories=[template_path], input_encoding='utf-8', output_encoding='utf-8')
16 
17     def render_string(self, filename, **kwargs):
18         template = self.lookup.get_template(filename)
19         namespace = self.get_template_namespace()
20         namespace.update(kwargs)
21         return template.render(**namespace)
22 
23     def render(self, filename, **kwargs):
24         self.finish(self.render_string(filename, **kwargs))
25 
26 
27 class IndexHandler(BaseHandler):
28     def get(self):
29         self.render('index.html',title='Text',body='This is body')
30 
31 class Application(tornado.web.Application):
32     def __init__(self):
33         handlers = [
34                 (r'/',IndexHandler),
35                 ]
36         settings = {
37                 'template_path' : os.path.join(os.path.dirname(__file__),'templates')
38                 }
39         tornado.web.Application.__init__(self, handlers,**settings)
40 
41 if __name__ == '__main__':
42     application = Application()
43     application.listen(8080)
44     tornado.ioloop.IOLoop.instance().start()
复制代码

将index.html文件放到templates文件夹下

复制代码
 1 ##-*- coding: utf-8 -*-
 2 <!DOCTYPE html>
 3 <html lang="en">
 4 <head>
 5   <meta charset="UTF-8">
 6   <title>${title}</title>
 7 </head>
 8 <body>
 9   ${body}
10 </body>
11 </html>
复制代码

运行 python main.py

输入网址http://localhost:8080 即可看到结果,如图:

 

 

 

 

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值