#tornado template 使用
1. 配置template模块目录
在settings 中写入
'template_path':os.path.join(os.path.dirname(__file__), "templates")
2. 创建一个index.html到 templates目录下
......这里使用`4. index.html`中的代码
3. 在get/post等其中一个方法中添加如下
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
直接显示: { {ls}} 传递数组显示: {% for a in ls %} { {escape(a)}} {% end %}
直接显示:{ {var_dict}}传递dict 显示: {% for key, value in var_dict.items() %} { {key}}, { {value}} {% end %}
传递单个值显示: { {num}}
传递方法添加: { {add(1,2)}}
5. 总结一部分
以上是简单的template使用;归纳一下template里面的语法有:
-
内置表达式:
{ {表达式在这里}}
-
控制状态流:
{%if 或者 for %} ... 这里是各种表达式 {%end%}
-
在Template中使用方法, 默认所有template内置的方法有: escape(), url_escape(), json_encode(), squeeze()
from tornado.template import Templatedef add(a, b): return a+bTemplate("count is { {add(1,2)}}").generate(add=add)
6. 扩展Template
继承{% extends "filename.html" %}
-
创建一个sub.html, 清空里面的内容只输入一句话
{% 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
语法:
{% block header %}{% end %}# 定义一个 {% block header %}赋值在中间{% end %}# 中间赋值
其实主要作用是用来替换
基模板中的一些代码块
-
新建一个base.html
{% block header %}{% end %} {% block body %}{% end %} -
写一个main.html
{% extends "base.html" %} {% block header %}
这里是头部赋值
{% end %} {% block body %}这里是body 赋值
{% end %} {% block footer %}这里是footer赋值
{% end %}
就好比在base.html中定义了一堆变量,然后在main.html中赋值一样
UIModel
-
继承tornado.web.UIModul
class HelloModule(tornado.web.UIModule): def render(self): return '
Hello, world!
' -
设置Application中
ui_modules={'Hello', HelloModule}
定义一个名为Hello的modle对象
-
在 hello.html中使用
{% module Hello() %}
这个就简单介绍了;
其他
-
设置变量
{%set var='xxxx'%} # 使用 { {var}}