设为首页 收藏本站
查看: 838|回复: 0

[经验分享] python学习笔记

[复制链接]

尚未签到

发表于 2017-5-5 12:41:40 | 显示全部楼层 |阅读模式
初学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很值得学习 ;)
请大家帮忙予以指正、帮助啊,如果有什么地方我理解错了或者好的建议等等!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-373495-1-1.html 上篇帖子: Python版支付宝集成插件源代码 下篇帖子: Python读写文件实际操作的五大步骤
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表