个人博客

Tornado模板的使用

指定模板目录和使用

在使用模板之前,我们都会先指定模板文件存放得路径,首先向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 %}
相关标签
回到顶部