1.后端代码
import tornado.ioloop
import tornado.web # web应用api
from utils import ui_methods, ui_modules
# 定义一个类,给模板使用
class People:
def run(self):
return '正在跑步'
def eat(self):
return '正在吃东西'
class MainHandler(tornado.web.RequestHandler):
# 定义一个方法,给模板使用
def test(self):
return '这是一个方法'
def get(self):
html = '<h1>Hello World</h1>'
data = {
'html': html,
'test': self.test,
'people': People
}
self.render('index.html', **data)
def make_app():
return tornado.web.Application([ # tornado配置,静态文件等
(r"/", MainHandler), # 配置路由
],
debug=True,
autoescape=None, # 所有html模板都是取消转义
static_path='../static', # 配置静态文件路径
template_path='../template', # 配置模板路径
ui_methods=ui_methods, # 注册自定义方法
ui_modules=ui_modules, # 注册自定义模板
)
if __name__ == "__main__": # 只有在当前文件运行的时候才会执行
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start() # 开启tornado服务
2.HTML页面
{% autoescape None %} <!-- 让整个html文件的标签都取消转义 -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ html }}<br>
{{ escape(html) }}<br> <!-- 让html标签转义 -->
{% raw html %}<br> <!-- html标签取消转义 -->
{{ test() }}<br> <!-- 使用后端的方法 -->
{% set p = people() %} <!-- 使用后端的类,实例化 -->
{{ p.run() }}<br>
{{ p.eat() }}<br>
{{ func() }}<br> <!-- 使用后端的方法 -->
{% module Custom() %} <!-- 使用后端的类,实例化 -->
</body>
</html>
3.自定义模板
ui_modules.py文件:定义模板类与方法
# 用来写常用的类,给模板使用的
from tornado.web import UIModule
class Custom(UIModule):
def embedded_css(self): # 嵌入式css样式
return "h1{color:pink}"
def css_files(self):
return 'css静态文件'
def embedded_javascript(self): # 嵌入javascript代码
return "alert(123)"
def javascript_files(self):
return 'javascript静态文件'
def render(self,*args,**kwargs):
# return "<h1>返回内容</h1>" # 不设置转译是什么东西直接输出
return self.render_string('404.html') # 也可以返回一个页面
ui_methods.py文件:自定义方法
# 用来写常用的函数,给模板使用的
def func(self):
return '这是一个常用的方法'