Tornado模板

--------------------静态文件--------------------
1、static_path:通过向web.Application类的构造函数传递一个名为static_path的参数来告诉Tornado从文件系统的一个特定位置提供静态文件
app = tornado.web.Application(
[(r‘/‘, IndexHandler)],
static_path=os.path.join(os.path.dirname(file), "statics"),
)

2、对于静态文件目录的命名,为了便于部署,建议使用static
可以通过http://127.0.0.1/static/html/index.html来访问。而且在index.html中引用的静态资源文件,我们给定的路径也符合/static/...的格式,故页面可以正常浏览。

3、StaticFileHandler:可以通过tornado.web.StaticFileHandler来自由映射静态文件与其访问路径url。
1、tornado.web.StaticFileHandler是tornado预置的用来提供静态资源文件的handler。

2、
import os

current_path = os.path.dirname(__file__)
app = tornado.web.Application(
    [
        (r‘^/()$‘, StaticFileHandler, {"path":os.path.join(current_path, "statics/html"), "default_filename":"index.html"}),
        (r‘^/view/(.*)$‘, StaticFileHandler, {"path":os.path.join(current_path, "statics/html")}),
    ],
    static_path=os.path.join(current_path, "statics"),
)

3、path 用来指明提供静态文件的根路径,并在此目录中寻找在路由中用正则表达式提取的文件名。

4、default_filename 用来指定访问路由中未指明文件名时,默认提供的文件。

--------------------使用模板--------------------
1、路径与渲染
1、使用模板,需要仿照静态文件路径设置一样,向web.Application类的构造函数传递一个名为template_path的参数来告诉Tornado从文件系统的一个特定位置提供模板文件

2、
app = tornado.web.Application(
    [(r‘/‘, IndexHandler)],
    static_path=os.path.join(os.path.dirname(__file__), "statics"),
    template_path=os.path.join(os.path.dirname(__file__), "templates"),
)

3、在handler中使用render()方法来渲染模板并返回给客户端。
    self.render("index.html") # 渲染主页模板,并返回给客户端。

2、模板语法
1、变量与表达式
1、在tornado的模板中使用{{}}作为变量或表达式的占位符,使用render渲染后占位符{{}}会被替换为相应的结果值。
self.render("index.html",**kwargs)

    2、{{}}不仅可以包含变量,还可以是表达式
        self.render("index.html",{"p1":100,"p2":200})

        {{p1 + p2}}

2、控制语句
    1、在Tornado模板中使用Python条件和循环语句。控制语句以{\%和\%}包围,并以类似下面的形式被使用:
        {% if page is None %} 或 {% if len(entries) == 3 %}

    2、部分控制语句
        1、{% if ... %} ... {% elif ... %} ... {% else ... %} ... {% end %}

        2、{% for ... in ... %} ... {% end %}

        3、{% while ... %} ... {% end %}

3、函数
    1、static_url():Tornado模板模块提供了一个叫作static_url的函数来生成静态文件目录下文件的URL。
        1、使用方法
        <link rel="stylesheet" href="{{ static_url("style.css") }}">

        2、static_url函数创建了一个基于文件内容的hash值,并将其添加到URL末尾(查询字符串的参数v)。这个hash值确保浏览器总是加载一个文件的最新版而不是之前的缓存版本。无论是在你应用的开发阶段,还是在部署到生产环境使用时,都非常有用,因为你的用户不必再为了看到你的静态内容而清除浏览器缓存了。

        3、另一个好处是你可以改变你应用URL的结构,而不需要改变模板中的代码。例如,可以通过设置static_url_prefix来更改Tornado的默认静态路径前缀/static。如果使用static_url而不是硬编码的话,代码不需要改变。

    2、转义
        1、模板中可以通过raw语句来输出不被转义的原始格式

        2、注意:在Firefox浏览器中会直接弹出alert窗口,而在Chrome浏览器中,需要set_header("X-XSS-Protection", 0)

        3、关闭自动转义:
            1、Application中设置autoescape=None

            2、模板中添加 {% autoescape None %} 语句

        4、关闭自动转义后,可以使用escape()函数来对特定变量进行转义:{{ escape(text) }}

    3、自定义函数:在模板中还可以使用一个自己编写的函数,只需要将函数名作为模板的参数传递即可,就像其他变量一样。
        1、定义函数
        def house_title_join(titles):
            return "+".join(titles)

        2、将函数赋值到指定变量传递到模板
        self.render("index.html", houses=house_list, title_join = house_title_join)

        3、前端调用指定的函数,并传入对应的参数
        {{title_join(house["titles"])}}

4、块
    1、进行模板页的嵌套
        1、指定继承的模板页
            {% extends "base.html" %}
        2、定义对应的模块,子模板继承父级模板进行对应的替换操作
            {% block block_name %} {% end %}

原文地址:http://blog.51cto.com/13517854/2129736

时间: 2025-01-17 10:51:46

Tornado模板的相关文章

tornado模板引擎原理

前言 老师问小明:已经a=1, 求a+1的值. 小明挠挠头,思考后回答:老师,a+1的结果是2. 以上是一个非常简单的例子,实际上就是一个模板编译过程. a=1,表示一个命名空间(namespace)中的一项,该命名空间中存在一个名称(name)为a,其值为1.在python里面,命名空间可以用数据结构字典来表示. a+1,实际上是一个非常简单的模板.这个模板里面有且只有一条规则a+1.本博文中所说的模板,实际上更类似一份空白的数学考卷.这份数学考卷中,有很多类似上面老师问小明的题目. 学生解决

tornado模板源码小析

最近对flask的热情有点下降,对tornado有点高涨. 之前在知乎上回答过一个问题,如何理解 Tornado ?,我的回答如下: 1.高性能的网络库,这可以和gevent,twisted,libevent等做对. 提供了异步io支持,超时事件处理,在此基础上提供了tcpserver,httpclient,尤其是curlhttpclient, 在现有http客户端中肯定排第一.可以用来做爬虫,游戏服务器,据我所知业界已有使用tornado作为游戏服务器 2.web框架,这可以和django,f

web(二)---tornado模板

一. 接上两节, 修改index.py如下: 增加了/index.py/template和处理句柄. import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world") class TemplateHandler(tornado.web.RequestHandler): def get(self)

tornado 模板引擎

在tornado的模板引擎中,有两种方式,UImethod与UImodule 自定义方法 在模板中调用方法: tornado:与Django一样使用{{}},但是对于for循环之类,Django以{% endfor%}结尾,而tornado以{% end%}结尾.调用字典或者列表,tornado使用list[0],而Django以list.0使用方法不一样. 要想使用UImethod与UImodule,必须先早app里面的settings中注册: import uimethod as udimp

Python程序员必知的tornado模板引擎语法

本文和大家分享的主要是tornado中cookie 验证机制相关内容,一起来看看吧,希望对大家 学习tornado有所帮助. 处理过程简单来说就是验证密码之后服务器端(tornado) 返回带有  cookie  信息的  Set-Cookie header 给客户端 ,  之后客户端发起请求时会把此  cookie  放入  Cookie header  中发给服务器端. tornado 设置 cookie 首先是对 cookie  的变量进行设置 , Morsel  是含有几个特殊  key

Tornado模板转义处理

转自:http://www.qttc.net/201305320.html tornado默认是转义所有字符,比较安全,但有时候我们的确需要把字符当做html来解析处理,因此我们需要做些处理. 示例: main.py 代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler):     def get(self

第四篇:白话tornado源码之脱光模板外衣的前戏

加班程序员最辛苦,来张图醒醒脑吧! ... ... ... 好了,醒醒吧,回归现实看代码了!! 执行字符串表示的函数,并为该函数提供全局变量 本篇的内容从题目中就可以看出来,就是为之后剖析tornado模板做准备,也是由于该知识点使用的巧妙,所有就单独用一篇来介绍了.废话不多说,直接上代码: #!usr/bin/env python #coding:utf-8 namespace = {'name':'wupeiqi','data':[18,73,84]} code = '''def hello

第四篇:白话tornado源码之褪去模板外衣的前戏

执行字符串表示的函数,并为该函数提供全局变量 本篇的内容从题目中就可以看出来,就是为之后剖析tornado模板做准备,也是由于该知识点使用的巧妙,所有就单独用一篇来介绍了.废话不多说,直接上代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #!usr/bin/env python #coding:utf-8   namespace = {'name':'wupeiqi','data':[18,73,84]}   code =  '''def hellocute():ret

Python框架之Tornado(四)源码之褪去模板外衣的前戏

执行字符串表示的函数,并为该函数提供全局变量 本篇的内容从题目中就可以看出来,就是为之后剖析tornado模板做准备,也是由于该知识点使用的巧妙,所有就单独用一篇来介绍了.废话不多说,直接上代码: #!usr/bin/env python #coding:utf-8 namespace = {'name':'xs','data':[18,73,84]} code = '''def hellocute():return "name %s ,age %d" %(name,data[0],)