Tornado模板的使用
作者:向前的步伐 / 发表: 2019年8月4日 20:19 / 更新: 2019年8月4日 20:19 / tornado / 阅读量:659
指定模板目录和使用
在使用模板之前,我们都会先指定模板文件存放得路径,首先向Application对象的__init__方法中传递一个template_path参数,这个参数告诉Tornado在哪个路径下寻找模板,如:
template_path = os.path.join(os.path.dirname(__file__), "templates")
这段代码告诉Tornado在项目所在的目录下的templates文件夹中讯在模板。
当我们指定了模板文件的目录之后,就可以使用RequestHandler类中的render方法来读取模板文件,插入其中的模板代码,返回结果给浏览器。比如:
self.render("index.html")
这段代码是让程序在templates目录下寻找index.html文件,读取里面的内容,并且发送给浏览器。
模板语法
Tornado模板是被python表达式和控制语句标记的简单文本文件,Tornado的语法很简单,如果使用过Django,那你就会发现它们的语法非常相似。
填充表达式
<h1>{{ article.title }}</h1>
代码中,使用两个大括号,将python中的变量值使用到模板中,你可以将python中任意的表达式放在双大括号内,就可以在模板中得到该表达式的计算结果的字符串值。
控制流语句
<html>
<head>
<title>{{ title }}</title>
</head>
<body>
<h1>{{ header }}</h1>
<ul>
{% for book in books %}
<li>{{ book }}</li>
{% end %}
</ul>
</body>
</html>
Tornado的模板中,也可以使用python中的条件和循环语句,控制语句以{%和%}包围,支持if、for、while、try。
模板中使用函数
Tornado在所有的模板中提供了一些函数,它们包括:
escape(s):替换字符串s中的&、<、>为对应的HTML字符。
url_escape(s):替换字符串s中的字符为URL编码形式。
json_encode(val):将val编码成JSON格式。
squeeze(s):过滤字符串s把连续多个空白字符替换成一个空格。
块和继承
Tornado通过extends和block语句支持模板继承,为了扩展一个已存在的模板,你只需要在新的模板文件的顶部写上一句{% extends 'filename.html' %}。这样在新的文件就继承了该‘filename.html’的所有标签,并且覆盖里面的内容。
为了使一个模板复用之前的写过的代码,并且在新的模板中又要有新的去求改变,这时候就需要用到block语句,它可以让你继承模板,同时做出相应的改变。
一个语句块压缩了一些当你扩展时需要改变的模板元素,比如你在base.html模板中定义一个title的块:
<title>{% block title %}{% endblock %}</title>
这时,只要在你继承的文件中继承base.html文件,同时覆盖title块,就可以继承base.html模板中的元素,同时定义自己的title,如:
{% extends "base.html" %}
{% block title %}articles list{% endblock %}