一、Tornado框架模板的简介
参考文档:https://tornado-zh.readthedocs.io/zh/latest/guide/templates.html
Tornado 也可以使用其他的Python模板语言, 虽然没有准备把这些系统整合 到 RequestHandler.render
里面,而是简单的将模板转成字符串并传递给 RequestHandler.write
进行发送渲染到前面。
二、模板的配置
1、配置
- 在Application对象中的settings中进行配置模板文件路径,即
template_path='templates'
- 在Application对象中的settings中进行配置静态文件路径,即
static_path='static'
2、示例
- app.py文件
import tornado.web
import tornado.ioloop
from tornado.options import options, define, parse_command_line
define('port', default=8000, type=int, help="运行端口")
class FirstHandler(tornado.web.RequestHandler):
def get(self):
self.write("<h1><span style='color:red'>这是首页面</span></h1>")
class PictureHandler(tornado.web.RequestHandler):
def get(self):
self.write("<html><body><img src='/static/images/1.jpg'></body></html>")
#这里satic前面加上/(正斜杆)是代表绝对路径,如果不加,则代表相对路径,但是在多个路由的时候就会报错。
def initialize(self):
print('对象{}被创建了'.format(self))
class TemplateHandler(tornado.web.RequestHandler):
def get(self):
username = '小龙'
items = ["Item 1", "Item 2", "Item 3"]
self.render('1demo.html', username=username, title="基础模板", items=items) #这里直接会在template文件夹下进行寻找
def post(self):
username = self.get_argument('name', 'no')
self.render('2demo.html', username=username)
#在浏览器中输入http://192.168.212.131:8000/template?name=xiaolong是不会对post请求有作用的,用以下的方式进行操作是可以的
def make_app():
handlers = [
(r'/', FirstHandler),
(r'/picture', PictureHandler),
(r'/template', TemplateHandler)
]
settings = \
{'debug': True,
'static_path': 'static',
'template_path': 'templates'
}#直接写staic这里是相对路径,这是相对与这个脚本的路径而言的
app = tornado.web.Application(handlers=handlers, **settings)
return app
if __name__ == '__main__':
app = make_app()
# app.listen(8000)
parse_command_line()
port_new = options.port
app.listen(port_new)
print(type(port_new))
print("Tornado server running at %s port" % port_new)
tornado.ioloop.IOLoop.current().start()
- 1demo.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{ title}}</title>
</head>
<br>
大家好!我是{{ username }}</br>
传过来的数据是{{items}}
</body>
</html>
- 2demo.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Torando</title>
</head>
<body>
欢迎{{username}}!!!
</body>
</html>
3、当访问路径中post方法的方式
- 在ubuntu中:
curl -d name=hu 127.0.0.1:8000/template
三、模板语法
Tornado模板支持 控制语句(control statements) 和 表达式(expressions)。
参考文档和示例:https://tornado-zh.readthedocs.io/zh/latest/template.html#module-tornado.template
1、控制语句
- 控制语句被包在 {% 和 %} 中间, {% if len(items) > 2 %},并且以{%end%}结束。
- 控制语句或多或少都和Python语句类似。我们支持 if, for, while, 和 try, 这些都必须使用 {% end %}
- {{!....}},即{{! 1+1}},表示不执行1+1等于2这个操作,而是直接输出原样的式子。
- {# ....#}表示注释语句
- {% set a=5 %},即设置一个值a=5。
2、表达式被包在 {{ 和 }} 之间, 即 {{ items[0] }},以上有做解释。
四、模板的转义
- 在Tornado中它是默认支持转义的,当前端传一个a标签的字符串的时候,他会自动在前端将数据原样的输出来。(传入的数据都会被当成字符串,不会被浏览器解析)
- {% raw 模板变量%}(
局部去掉转义
),就会不转义相关内容,会以前端表示的形式输出。 - {% autoescape None%}(
全局去掉转义
),就会不转义相关内容,会以前端表示的形式输出。 - 当设置了全局去掉转义的时候,可以用{{ escape(模板变量)}}恢复转义效果。
- {{linkify("Hello http://tornadoweb.org!")}},这个linkify就会自动的将相关地址打印出来。
五、静态文件的引用(图片)
- <img src="/static/images/1.jpg" width="250" height="250"/>,直接以绝对路径的方式来引入图片这个静态文件。(这是在Application对象的settings中色设置了'static_path'='static')
- <img src="{{ static_url('images/1.jpg') }}" width="250" height="250"/>(这个可以自动给静态文件添加版本号,如果版本号改了的话,浏览器会自动的缓存新的静态文件)
网友评论