tornado template 使用
1. 配置template模块目录
在settings 中写入
1
|
'template_path'
:os.path.join(os.path.dirname(__file__),
"templates"
)
|
2. 创建一个index.html到 templates目录下
1
2
3
4
5
6
7
8
9
|
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
......这里使用`
4
. index.html`中的代码
</body>
</html>
|
3. 在get/post等其中一个方法中添加如下
1
2
3
4
5
6
|
ls=[
'af '
,
'aaa '
,
'cccc '
]
num=
1
var_dict = {
'key1'
:
'value1'
,
'key2'
:
'value2'
}
def add(a,b):
return
a+b
self.render(
'index.html'
, ls=ls, num=num, var_dict = var_dict, add=add)
|
4. index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
<div>
直接显示: {{ls}}<br/>
传递数组显示: <br/>
{%
for
a in ls %}
{{escape(a)}} <br/>
{% end %}
</div>
<hr>
直接显示:{{var_dict}}<br/>
<div>
传递dict 显示: <br/>
{%
for
key, value in var_dict.items() %}
{{key}}, {{value}} <br/>
{% end %}
</div>
<hr>
<div>
传递单个值显示:
{{num}}
</div>
<hr>
<div>
传递方法添加:<br/>
{{add(
1
,
2
)}}
</div>
|
5. 总结一部分
以上是简单的template使用;归纳一下template里面的语法有:
-
内置表达式:
{{表达式在这里}}
-
控制状态流:
123{%
if
或者
for
%}
... 这里是各种表达式
{%end%}
-
在Template中使用方法, 默认所有template内置的方法有: escape(), url_escape(), json_encode(), squeeze()
1234from tornado.template
import
Template
def add(a, b):
return
a+b
Template(
"count is {{add(1,2)}}"
).generate(add=add)
6. 扩展Template
继承{% extends "filename.html" %}
-
创建一个sub.html, 清空里面的内容只输入一句话
1{%
extends
"index.html"
%}
-
修改
self.render('index.html', ls=ls, num=num, var_dict = var_dict)
成
self.render('sub.html', ls=ls, num=num, var_dict = var_dict)
运行一下,发现还是可以用的,说明sub.html完全继承了index.html;这样就实现了代码重用部分了
Blocks
语法:
1
2
|
{% block header %}{% end %}# 定义一个
{% block header %}赋值在中间{% end %}# 中间赋值
|
其实主要作用是用来替换
基模板中的一些代码块
-
新建一个base.html
123456789<html> <body>
<header>
{% block header %}{% end %}
</header> <content>
{% block body %}{% end %} </content>
<footer>
{% block footer %}{% end %}
</footer> </body>
</html>
-
写一个main.html
12345678910111213{%
extends
"base.html"
%}
{% block header %}
<h1>这里是头部赋值</h1>
{% end %}
{% block body %}
<p>这里是body 赋值</p>
{% end %}
{% block footer %}
<p>这里是footer赋值</p>
{% end %}
就好比在base.html中定义了一堆变量,然后在main.html中赋值一样
UIModel
-
继承tornado.web.UIModul
123class
HelloModule(tornado.web.UIModule):
def render(self):
return
'<h1>Hello, world!</h1>'
-
设置Application中
1ui_modules={
'Hello'
, HelloModule}
定义一个名为Hello的modle对象
-
在 hello.html中使用
123<body>
{% module Hello() %}
</body>
这个就简单介绍了;
其他
-
设置变量
123{%set var=
'xxxx'
%}
# 使用
{{var}}