专栏目录请点击
前提
我们新建如下目录结构
其中
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h2>Hello World</h2>
</body>
</html>
app.py
import tornado.ioloop
import tornado.web
import os
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.render("index.html")
def make_app():
return tornado.web.Application(
# 路由
[
(r"/", MainHandler),
],
# 网页模板
template_path=os.path.join(os.path.dirname(__file__), "templates")
)
if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
运行并访问http://localhost:8888/
,他会返回如下结果
变量与表达式
我们可以想模板index.html
中传递一个变量和表达式
index.html
<body>
<h2>Hello World</h2>
<h3>num:{{num}}</h3>
<h3>num + 10:{{num + 10}}</h3>
<h3>姓名1:{{person["name"]}}</h3>
<h3>年龄1:{{person["age"]}}</h3>
<h3>姓名2:{{name}}</h3>
<h3>年龄2:{{age}}</h3>
<!-- 变量设置 -->
{% set sex = "男" %}
<h3>性别:{{sex}}</h3>
</body>
handler
class MainHandler(tornado.web.RequestHandler):
def get(self):
num = 5
person1 = {
"name": "sunwukong",
"age": 18
}
person2 = {
"name": "zhubajie",
"age": 25
}
self.render("index.html", num=num, person=person1, **person2)
效果
流程控制
循环
index.html
<ul>
{% for _i in _list %}
<li>{{_i}}</li>
{% end %}
</ul>
<ul>
{% for _index,_element in enumerate(_list) %}
<li>序号:{{_index}},元素:{{_element}}</li>
{% end %}
</ul>
handler
_list = [1, 2, 3, 4]
self.render("index.html", _list=_list)
此外,我们还可以使用while来做循环,不常用,这里就不做解释了
效果
判断
index.html
<h2>if</h2>
{% for _index,_element in enumerate(_list) %}
{% if _element == 3 %}
<li>输出的元素为3,序号:{{_index}},元素:{{_element}}</li>
{% end %}
{% end %}
handler
_list = [1, 2, 3, 4]
self.render("index.html", _list=_list)
效果
函数
static_url
这是一个内置函数,用于用于静态路径的引入
我们在项目的根目录下新建static/css/index.css
,并写上如下代码
index.css
.title{
color: red;
}
index.html
<body>
<h2>Hello World</h2>
<p class="title">我爱我的祖国</p>
</body>
handler
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.render("index.html")
def make_app():
return tornado.web.Application(
# 路由
[
(r"/", MainHandler),
],
# 网页模板
template_path=os.path.join(os.path.dirname(__file__), "templates"),
# 静态路径
static_path=os.path.join(os.path.dirname(__file__),"static")
)
if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
效果
自定义函数
index.html
<body>
<h2>Hello World</h2>
<section>
<span>result</span>
<span>{{myFun(1,2)}}</span>
</section>
</body>
handler
class MainHandler(tornado.web.RequestHandler):
def get(self):
def myFun(num1,num2):
return num1 + num2
self.render("index.html", myFun=myFun)
结果