使用StaticFileHandler进行首页默认访问页面,最好将StaticFileHandler放在最后面,这样不会覆盖要匹配自定义的路径

import tornado.web
import tornado.ioloop
import tornado.options
import tornado.httpserver
from tornado.options import options
from tornado.web import RequestHandler, StaticFileHandler
import os current_path = os.path.dirname(__file__)
tornado.options.define('port', type=int, default=8000, help="服务器端口") class IndexHandler(RequestHandler):
def get(self):
self.write('OK') if __name__ == '__main__':
tornado.options.parse_command_line()
app = tornado.web.Application([
(r'/(.*)', StaticFileHandler, dict(path=os.path.join(current_path, 'static/html'), default_filename='index.html')),
], debug=True)
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.current().start()

static_path/template_path

static_path:设置静态文件的访问目录

template_path:设置静态页面路径

static_url(): 根据设置的静态,目录寻找静态文件

render():跳转文件,使用render默认的是模板转义。

import tornado.web
import tornado.ioloop
import tornado.options
import tornado.httpserver
from tornado.options import options
from tornado.web import RequestHandler, StaticFileHandler
import os current_path = os.path.dirname(__file__)
tornado.options.define('port', type=int, default=8000, help="服务器端口") class IndexHandler(RequestHandler):
def get(self):
# self.render('index.html') # 跳转静态页面
dict1 = {'name': 'namejr', 'age':22}
self.render('index.html',dict1=dict1) # 使用render()还可以传递参数 if __name__ == '__main__':
tornado.options.parse_command_line()
app = tornado.web.Application([
(r'/', IndexHandler),
# 使用StaticFileHandler进行首页默认访问页面,最好将StaticFileHandler放在最后面,这样不会覆盖要匹配自定义的路径
(r'/(.*)', StaticFileHandler, dict(path=os.path.join(current_path, 'static/html'), default_filename='index.html')),
], debug=True, static_path=os.path.join(current_path, 'static'), template_path=os.path.join(current_path, 'templates'))
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.current().start()

使用render()传递参数接收方法:

<!DOCTYPE html>
<html>
<head>
<title></title>
<!-- static_url使用静态资源文件 -->
<link rel="stylesheet" type="text/css" href="{{ static_url('css/index.css') }}">
</head>
<body>
<h1>namejr</h1>
<p>name :{{ dict1['name'] }}, age:{{ dict1['age'] }}</p>
</body>
</html>

除了上述案例中的将每个debug/static_path/template_path单独添加到tornado.web.Application()中之外,还可以使用**setting

import tornado.web
import tornado.ioloop
import tornado.options
import tornado.httpserver
from tornado.options import options
from tornado.web import RequestHandler
import os tornado.options.define('port', type=int, default=8000, help="服务器端口")
current_path = os.path.dirname(__file__)
setting = dict(debug=True, template_path=os.path.join(current_path, 'templates'), static_path=os.path.join(current_path, 'static')) class IndexHandler(RequestHandler):
def get(self):
self.render('new.html') if __name__ == '__main__':
tornado.options.parse_command_line()
app = tornado.web.Application([
(r'/', IndexHandler),
], **setting)
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.current().start()

关于静态文件使用if..else..等语句

{% if %}...{% elif %}..{% else %}...{% end %}

{% for %} {% end %}

即使用{%%}方式执行python语句,使用{{ num }} 接收静态参数

如何修改render()不进行转义?

下面有这几种方法:

第一种:关闭整个网站的模板转义

在tornado.web.Application()添加参数autoescape=None

app = tornado.web.Application([
(r'/', IndexHandler),
], debug=True, template_path=os.path.join(current_path, 'templates'), autoescape=None)

注:在谷歌浏览器会自动拦截,可在控制台查看拦截原因

第二种:关闭单个页面转义,{% autoescape None %}

<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<form method="post">
<textarea name='text'></textarea>
<input type="submit" value="sub">
</form>
{% autoescape None %}
{{ texts }}
</body>
</html>

第三种:单条语句转义,{% raw texts %}

<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<form method="post">
<textarea name='text'></textarea>
<input type="submit" value="sub">
</form>
{% raw texts %}
</body>
</html>

第四种:关闭全局转义后想在单个页面进行不转义,{{ escape(texts) }}

关于自定义处理函数

# index.py
import tornado.web
import tornado.ioloop
import tornado.options
import tornado.httpserver
from tornado.options import options
from tornado.web import RequestHandler
import os tornado.options.define('port', type=int, default=8000, help="服务器端口")
current_path = os.path.dirname(__file__) # 构建处理函数
def deal_dict(names):
return ''.join(names) class IndexHandler(RequestHandler):
def get(self):
# 构建数据
dict1 = [
{
'name': ['n', 'a', 'm', 'e', 'j', 'r'],
'age': 21
},
{
'name': ['n', 'a', 'm', 'e', 'm', 'm'],
'age': 22
},
{
'name': ['n', 'a', 'm', 'e', 'm', 'b'],
'age': 23
},
{
'name': ['n', 'a', 'm', 'e', 'a', 'b'],
'age': 24
}
]
self.render('index.html', texts=dict1, func_deal_dict=deal_dict) if __name__ == '__main__':
tornado.options.parse_command_line()
app = tornado.web.Application([
(r'/', IndexHandler),
], debug=True, template_path=os.path.join(current_path, 'templates'))
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.current().start()
index.html:
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<table border="1">
<!-- 进行解析数据 -->
{% for text in texts %}
<tr>
<!-- 使用函数处理 -->
<td>{{ func_deal_dict(text['name']) }}</td>
<td>{{ text['age'] }}</td>
</tr>
{% end %}
</table>
</body>
</html>

父子模板的使用:

# 父模板(index.html)

<!DOCTYPE html>
<html>
<head>
<title>父模板</title>
</head>
<body>
<header>
<p>这是请求头</p>
{% block header %}{% end %}
</header>
<center>
<p>这是请求内容</p>
{% block content %}{% end %}
</center>
</body>
</html>

# 子模板,使用extends继承父模板,用block来填充父模板挖的坑

{% extends 'index.html' %}
{% block header %}
<span>标题</span>
{% end %}
{% block content %}
<span>内容</span>
{% end %}

Tornado 模板(StaticFileHandler/static_path/template_path等) 笔记的更多相关文章

  1. Tornado模板

    --------------------静态文件-------------------- 1.static_path:通过向web.Application类的构造函数传递一个名为static_path ...

  2. tornado.web.StaticFileHandler

    tornado.web.StaticFileHandler 源代码中的解释 class StaticFileHandler(RequestHandler): """A s ...

  3. Tornado模板配置

    #!/usr/bin/env python # -*- coding:utf-8 -*- #tornado模板配置 import tornado.ioloop import tornado.web c ...

  4. tornado 模板引擎

    在tornado的模板引擎中,有两种方式,UImethod与UImodule 自定义方法 在模板中调用方法: tornado:与Django一样使用{{}},但是对于for循环之类,Django以{% ...

  5. Tornado 模板支持“控制语句”和“表达语句”的表现形式

    Tornado 的模板支持“控制语句”和“表达语句”,控制语句是使用 {% 和 %} 包起来的 例如 {% if len(items) > 2 %}.表达语句是使用 {{ 和 }} 包起来的,例 ...

  6. tornado模板的使用

    一. 配置模板路径 settings中使用template_path来指定模板的路径, 实例化服务对象时加载进去即可. 二. 模板的使用 1. 使用self.render()方法可返回指定的html页 ...

  7. Mvc Model 模板的获取【学习笔记】

    MVC的Model模板有两种:一种编辑模式(@Html.EditorFor()).一种显示模式(Html.DisplayFor()). 模板的获取与执行(以下转自这里): 当我们调用HtmlHelpe ...

  8. tornado模板的自动编码问题(autoescape )

    tornado新版(具体版本未知)支持自动转义,比如{{ "<div>" }}不会输出html标签,而是进行转义. {{ module.test(10) }} 也会进行 ...

  9. javascript模板引擎之artTemplate 学习笔记

    <div id="content"></div><div id="content1"></div><h1& ...

随机推荐

  1. MySQL:数据表基本操作

    数据表基本操作 注意点: 1.数据表中已经有数据时,轻易修改数据类型,有可能因为不同的数据类型的数据在机器 中存储的方式及长度并不相同,修改数据类型可能会影响到数据表中已有的数据类型. 2.  数据表 ...

  2. python3 自学第一天,python 介绍

    1.python的介绍: 是一个无聊的人创造的 2.python的格式: 跟java这些语言格式不一样用的是缩进来编码(区块) 一般是四个空格,这样更简洁 3.编码格式: python3跟python ...

  3. python储存数据的方式

    python储存数据的方式2017年10月13日 23:38:10 Nick_Spider 阅读数:59286 标签: redis 数据库 爬虫 存储 结构 更多 个人分类: 数据库 爬虫 pytho ...

  4. BZOJ 1083 [SCOI2005]繁忙的都市 (最小生成树裸题无重边) 超简单写法!!

    Description 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口 ...

  5. HDU1548- A strange lift (BFS入门)

    题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1548 A Strrange lift Time Limit: 2000/1000 MS (Java/ ...

  6. 基于NEO的私链(Private Blockchain)

    1.准备工作 1.NEO-GUI 2.NEO-CLI 3..NET Core Runtime (不能是2.x版本,官方建议是1.12,实际上我用1.14也是没有问题的) 4.四台windows操作系统 ...

  7. libev

    libev是一个**事件驱动库**,它需要循环探测事件是否发生,在Linux上实际是封装了epoll等系统调用. 其循环过程由ev_loop( )函数设置,循环体是ev_loop结构. //创建事件循 ...

  8. swing的弹出窗口

    swing作为基础的图形化显示界面开发,还是新手小难上手的一个项目学习,当然做好了之后的数据流转是对编程架构的很大提高. 这里我介绍一下swing的弹出窗口,作为界面交互的时候不可或缺的检测工具,简直 ...

  9. [LeetCode&Python] Problem 748. Shortest Completing Word

    Find the minimum length word from a given dictionary words, which has all the letters from the strin ...

  10. 2016 ACM-ICPC EC-Final

    题目链接:Uva传送门 CFGym传送门 UVALive7897 Number Theory Problem (找规律签到) 思路: 8的幂次都是可以的,因为an-1一定能分解成a-1乘上一个多项式. ...