首页 > 编程语言 > 详细

Python tornado 之 模板的继承

时间:2021-08-05 22:24:07      阅读:29      评论:0      收藏:0      [点我收藏+]

1、我们可以像复用python中的函数一样,复用一个HTML模板。

语法:

通过 {% extends "xxx.html" %} 复用xxx.html模板,xxx.html表示模板文件

要继承一个父模板,只需要在文件的最上面写上一句 {% extends "xxx.html" %} 即可

 

通过 {% block block_name %}{% end %}来重写模板中定义的块 ,block_name表示块的名字

要实现自己与父模板不同的新功能,只需要重写父模板的block块即可

举例:

(1)先定义一个基础模板文件 命名: base_template.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    {% block header %}
    <title>基础模板-title</title>
    {% end %}
</head>

<body>
{% block body %}
<h1>基础模板一级标题</h1>
<h2>基础模板二级标题</h2>
<a href="/children">进入孩子节点模板</a>
{% end %}
<p>这是不可改变的标签,因为它不在block块里</p>
<p>这是不可改变的标签,因为它不在block块里</p>
<p>这是不可改变的标签,因为它不在block块里</p>
</body>

</html>

(2)再定义一个孩子节点模板,继承基础模板 命名: children_template.html

{% extends "base_template.html" %}

{% block header %}
<title>孩子节点-title</title>
{% end %}

{% block body %}
<h1>孩子节点一级标题</h1>
<h2>孩子节点二级标题</h2>
<a href="/grandson">进入孙子节点模板</a>
{% end %}

<p>这是不可显示的标签,因为它不在block块里</p>
<p>这是不可显示的标签,因为它不在block块里</p>
<p>这是不可显示的标签,因为它不在block块里</p>

(3)再定义一个孙子节点模板,继承继承模板 命名: grandson_template.html

{% extends "base_template.html" %}

{% block header %}
<title>孙子节点-title</title>
{% end %}

{% block body %}
<h1>孙子节点一级标题</h1>
<h2>孙子节点二级标题</h2>
<h3>来自后台的三级标题:{{h3}}</h3>
<h4>来自后台的四级标题:{{h4}}</h4>
<a href="/">进入基础模板</a>
{% end %}

<p>这是不可显示的标签,因为它不在block块里</p>
<p>这是不可显示的标签,因为它不在block块里</p>
<p>这是不可显示的标签,因为它不在block块里</p>

(4)定义后台py文件

import os.path

import tornado.ioloop
import tornado.web
from tornado.options import define
from tornado.options import options


class MyApplication(tornado.web.Application):
    def __init__(self, ):
        template_path = os.path.join(os.path.dirname(__file__), template)
        template_path = os.path.abspath(template_path)
        static_path = os.path.join(template_path, static),
        settings = {
            handlers: [  # 请求路由
                (/, BaseHandler),
                (/children, ChildrenHandler),
                (/grandson, GrandsonHandler),
            ],
            template_path: template_path,  # 模板路径
            static_path: static_path,  # 静态资源路径
            debug: True,  # 设置为debug模式
        }
        super().__init__(**settings)


class BaseHandler(tornado.web.RequestHandler):
    def get(self):
        self.render(base_template.html)


class ChildrenHandler(tornado.web.RequestHandler):
    def get(self):
        self.render(children_template.html)


class GrandsonHandler(tornado.web.RequestHandler):
    def get(self):
        self.render(grandson_template.html, h3=嘿嘿, h4=嘻嘻)


if __name__ == __main__:
    # 定义端口, 可以全局使用options.port获取,可通过命令行更改
    define(port, default=8080, help=设置启动服务的端口, type=int)
    options.parse_command_line()  # 分析命令行参数

    application = MyApplication()
    # 监听端口8080,可以通过命令行改变,python xxx.py --port=8090
    application.listen(options.port)
    tornado.ioloop.IOLoop.current().start()  # 启动web服务

解析:

直接继承Application类,重写init函数,把路由和模板资源路径,静态资源路径传递进去即可。

这种写法等同于以前的写法

template_path = os.path.join(os.path.dirname(__file__), template)
template_path = os.path.abspath(template_path)
application = tornado.web.Application(
        handlers=[(/, BaseHandler)],
        template_path=template_path,
        static_path=os.path.join(template_path, static),
        debug=True,  # 设置为debug模式
    )  # 设置路由
# 监听端口8080,可以通过命令行改变,python xxx.py --port=8090
application.listen(options.port)
tornado.ioloop.IOLoop.current().start()  # 启动web服务

运行后,访问浏览器 http://127.0.0.1:8080/

技术分享图片 

 点击进入孩子节点模板

技术分享图片

 点击进入孙子节点模板

技术分享图片

 学习链接 : http://doc.iplaypy.com/tornado/ch3.html

 

Python tornado 之 模板的继承

原文:https://www.cnblogs.com/rainbow-tan/p/15105196.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!