初学tornado,发现tornado框架模板引擎可扩展性非常高,小做笔记下关于"如何添加自定义函数在对应模板中":
这里是代码场景:
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很值得学习 ;)
请大家帮忙予以指正、帮助啊,如果有什么地方我理解错了或者好的建议等等!
分享到:
相关推荐
Python 2.7,离线安装 合集 tornado-4.4.2,python2-backports_abc-0.5-2,python-backports-ssl_match_hostname-3.5.0.1-1,python2-certifi-2016.9.26-2,future-0.15.1.tar.gz,future-0.17.1.tar.gz,python-...
$ cd tutorial-python-microservice-tornado $ tree . . ├── LICENSE ├── README.md ├── addrservice │ ├── __init__.py │ ├── database │ │ ├── __init__.py │ │ ├── addressbook_db.py...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其 非阻塞的方式和对 epoll的运用,Tornado 每秒可以处理数以千计的连接,因此 ...
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
python-efficient-development-django-tornado-flask-twisted:Python高效开发实战:Django,Tornado,Flask,Twisted原始码
Python_tornado专栏中——18.Tornado_个人信息案例前端样式。是一个个人信息填写的前端样式。具体使用方法可以去专栏中查看噢
tornado-boilerplate, Tornado 应用程序的标准布局 龙卷风样板--是 Tornado 应用的标准布局描述龙卷风样板是为 Tornado 应用程序布局建立一个惯例,帮助编写实用程序来部署这些应用程序。 一点约定可能会很长。这里...
软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备...
一个基于Tornado Web 框架的简单的RESTFul API库
JSParser 使用Tornado和JSBeautifier的python 2.7脚本来解析JavaScript文件中的相对URL。 用于在执行安全研究或Bug赏金狩猎时轻松发现AJAX请求。
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
四种主流的Python Web开发框架,零基础完成网站搭建、数据库设计、前后端开发,全方位领悟Python原理与应用
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
TornaREST 基于 Tornado 实现的简洁 RESTful web 服务
资源分类:Python库 所属语言:Python 资源全名:wsrpc-tornado-0.5.3.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
离线安装包,亲测可用
Turbo 是一个 Python 的 Web 框架,用于快速构建 Web 网站和 RESTful API,基于 Tornado、MongoDB 和 Redis。主要特性: 易于安装和维护 快速开发 Web 网站和 RESTful api 使用 Django 或者 flask 应用结构 定制容易
Python项目开发-BBS问答社区系统设计源代码+开发文档说明资料: 系统环境 Windows/Linux/MacOS MySQL5.5以上 Redis任意版本 Python3.5以上版本 其他Python库: Tonado==5.0.2 PyMySQL==0.8.1 ipython==6.3.1 Pillow=...
资源分类:Python库 所属语言:Python 资源全名:tornado-6.0.2.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059