浏览 13239 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-02-22
最后修改:2011-02-22
这里是代码场景: import tornado.httpserver import tornado.ioloop import tornado.web # define one "add" customization funcation which will be used in the assigned template file. def add(x, y): return (x+y) class MainHandler(tornado.web.RequestHandler): def get(self): items = ["item1","item2","item3"] # render the corresponding template file, and pass the "**args" to the assigned template # not only we can pass the realted parameters, but also can pass the related functions. # so extendible and powerful! :) self.render("templates/template_test.html", items=items, add=add) application = tornado.web.Application([ (r"/", MainHandler), ]) if __name__ == "__main__": http_server = tornado.httpserver.HTTPServer(application) http_server.listen(8081) tornado.ioloop.IOLoop.instance().start() template_test.html <html> <head> <title>template function test</title> </head> <body> <ul> {% for item in items %} <li>{{ escape(item) }}</li> {% end %} {{ add(2,2) }} </ul> </body> </html> items:我们传递的变量参数 add:我们传递函数 我觉得: 大概的过程是将模板文件转换成string内容,然后再过滤、转换成原生的python代码,这样做的好处有很好的扩展性(例如添加自定义函数用于模板中),同时保留的原始的python语法声明,例如: Copy from template.py comment {% for student in [p for p in people if p.student and p.age > 23] %} <li>{{ escape(student.name) }}</li> {% end %} tornado.web.RequestHandler的render_string函数将会使用已知的参数,将模板内容转换成string内容, 然后再调用Template.generate(**args),该函数中会检查并添加新的函数(如果存在的话,通过dict.update) ---------------------------------------------------------------------- 然后通过compile内置函数执行对应的语法,这里笔记下compile的语法: >>> temp = "hello" >>> str = 'for i in range(0,10): print ("{0} {1}".format(i, temp))' >>> c = compile(str, 'temp', 'exec') >>> exec c 0 hello 1 hello 2 hello 3 hello 4 hello 5 hello 6 hello 7 hello 8 hello 9 hello compile(source, filename, mode[, flags[, dont_inherit]]) compile(source, filename ,mode)函数将一个字符串编译为字节代码, source是将要被编译的字符串, filename是定义该字符串变量的文件(示例代码中的temp将作为一个变量,用于将被执行的语句中,即str),mode参数指定了代码被编译的类型 'exec' if source consists of a sequence of statements 'eval' if it consists of a single expression 'single' if it consists of a single interactive statement compile()函数返回一个代码对象,该对象当然也可以被传递给eval()函数和exec语句来执行 小结: template.py 很粗略的看了下,越发觉得tornado很值得学习 ;) 请大家帮忙予以指正、帮助啊,如果有什么地方我理解错了或者好的建议等等! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-03-01
用过了Django MTV框架 和 webpy 框架 相信你一定会放弃tornado框架的
|
|
返回顶楼 | |
发表时间:2011-03-01
最后修改:2011-03-02
skyfen 写道 用过了Django MTV框架 和 webpy 框架 相信你一定会放弃tornado框架的
你好啊, 在学习tornado之前,我也有学习接触一点Django知识,Django相关的文档、已出版电子书比tornado多很多,这对社区的发展很有帮助,但有时候Django ORM“稍显”过紧密的藕合,以及模板语法的一些“限制”,让我觉得tornado更显随意(我没有对Django很熟悉,个人理解很浅显的,见谅啦) 关于webpy,我没有学习过,但是tornado的文档介绍它是类似webpy的一种web框架,webpy做为一款轻量级web框架拥有良好、优雅的扩展性,深受广大python朋友喜欢。 我学习tornado只是出于对python的系统学习: 1. tornado源码文件并不多,而且使用第三方的依赖也并不多,通过阅读源码对于学习python本身而言很有帮助,例如:你可以学习python代码的兼容性,接触各种相关语法,以及一些pythonic思想,大家共勉! 2. tornado不只是一个web框架,还是一个web app server,就目前来看它的性能会更胜一筹(之前也有看到其他网友做的性能测试,链接我找不到了,我自己目前还没有做过相关的性能测试) http://www.tornadoweb.org/documentation#performance 3. 想接触、学习下non-blocking web server的设计思想 相对所谓“劣势”: 1.好像在国内使用tornado并不多。 2.相关出版电子书资料真的不多,而且官方文档还需要翻*Qiang 我喜欢的: 1.tornado社区挺活跃的,很多人会在上面展开各种讨论、应用 2.源码很值得学习。 以上我没有对任何框架带有任何评价色彩(我只是一名python爱好者) Happy pythoneering! |
|
返回顶楼 | |
发表时间:2011-03-11
http://www.coien-cn.info/?87586.htm
|
|
返回顶楼 | |