使用模板的继承可以重复使用相同结构的模板, 可以大大减少代码量

入门实例

一、demo目录结构

注解:

master.html为模板内容,被index.html,account.html引用

二、各文件代码

2.1、master.html

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Master</title>
<style>
*{
margin: 0;
padding: 0;
}
.page-header{
height: 48px;
background-color: aqua;
}
.page-content{
height: 300px;
background-color: bisque;
}
.page-footer{
height: 30px;
background-color: aqua;
}
</style> </head>
<body>
<div class="page-header"></div>
<div class="page-content">
<!-- 自定义的内容,命名并占位-->
{% block tm_content %}
{% end %}
</div>
<div class="page-footer"></div>
<!-- 自定义的js文件位置,命名并点位-->
{% block tm_js %}
{% end %} <!-- 自定义css,命名并占位-->
{% block tm_css %}
{% end %}
</body>
</html>

2.2、form.html

<form>
<input type="text"/>
<input type="submit" value="提交"/>
</form>

2.3、account.html

 {% extends "../template/master.html" %}

 <!--自定义css具体内容-->
{% block tm_css %}
<script type="text/css">
.page-content{
background-color: aliceblue;
font-size: 20px;
}
</script>
{% end %} <!--自定义page-content中的内容-->
{% block tm_content %}
<p>这是我的account</p>
{% end %} <!--自定义js文件-->
{% block tm_js %}
<script type="text/javascript">
console.log("这是我的account")
</script>
{% end %}

2.4、index.html

{% extends "../template/master.html"%}

<!--对应的自定义css具体内容-->
{% block tm_css %}
<style type="text/css">
.page-content{
background-color: cornflowerblue;
}
</style>
{% end %} <!--自定义page-content的内容-->
{% block tm_content %}
<p>这是系统的首页</p>
{%include "../include/form.html" %}
{%include "../include/form.html" %}
{% end %} <!--自定义js的内容-->
{% block tm_js %}
<script type="text/javascript">
console.log("这是系统的首页")
</script>
{% end %}

2.5、start.py

 #!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019/12/5 23:41
# @Author : yusheng_liang
# @Site :
# @File : start.py
import tornado.web
import tornado.ioloop class IndexHandle(tornado.web.RequestHandler):
def get(self, *args, **kwargs):
self.render("extend/index.html") class AccountHandle(tornado.web.RequestHandler):
def get(self, *args, **kwargs):
self.render("extend/account.html") if __name__ == "__main__":
CONTENTS_LIST = []
settings = {
'template_path': 'views',
} application = tornado.web.Application([
(r"/index", IndexHandle),
(r"/account", AccountHandle),
], **settings) application.listen(80)
tornado.ioloop.IOLoop.instance().start()

三、demo效果示例

3.1、http://127.0.0.1/index

3.2、http://127.0.0.1/account

详解分析

  • 从运行结果来看, 两个网页的主体结构相同, 只是里边包含的css具体样式, 具体内容以及js文件不同
  • 要继承模板文件来使用我们要在当前文件首行写上{%extends "../template/master.html"%} , 这里表示当前文件以master.html来进行渲染
  • master.html文件中{%block tm_css%}{%end%}相当与为后面具体要写入的内容做一个占位符, 并且起名为tm_css

web框架--tornado框架之模板引擎继承的更多相关文章

  1. web框架--tornado框架之模板引擎

    使用Tornado实现一个简陋的任务表功能demo来讲解tornado框架模板引擎 一.demo目录结构 二.具体文件内容 2.1.commons.css .body{ margin: 0; back ...

  2. Tornado框架配置使用Jinja2模板引擎

    安装jinja2包 pip install jinja2 定义继承tornado.web.RequestHandler的子类BaseHandler.如果请求处理类继承这个类将会使用jinja模板引擎: ...

  3. flask框架下的jinja2模板引擎(3)(模板继承与可以在模板使用的变量、方法)

    flask 框架下的jinja2模块引擎(1):https://www.cnblogs.com/chichung/p/9774556.html flask 框架下的jinja2模块引擎(2):http ...

  4. flask框架下的jinja2模板引擎(1)(模板渲染)

    #转载请留言联系 模板是什么? 在 flask 框架中,视图函数有两个作用:处理业务逻辑和返回响应内容.在大型应用中,把业务逻辑和表现内容放在一起,会增加代码的复杂度和维护成本.模板作用即是承担视图函 ...

  5. laravel框架总结(二) -- blade模板引擎

    ## 1.基本用法 ##情形1 $name = laravel5 <div class="title"> {{$name}} {{$name}}</div> ...

  6. flask框架下的jinja2模板引擎(2)(过滤器与自定义过滤器)

    flask框架下的jinja2模块引擎(1):https://www.cnblogs.com/chichung/p/9774556.html 这篇论文主要用来记录下 jinja2 的过滤器. 什么是过 ...

  7. Spring Boot 系列(五)web开发-Thymeleaf、FreeMarker模板引擎

    前面几篇介绍了返回json数据提供良好的RESTful api,下面我们介绍如何把处理完的数据渲染到页面上. Spring Boot 使用模板引擎 Spring Boot 推荐使用Thymeleaf. ...

  8. web框架--tornado框架之初识

    在python中常见的web框架构建模式有以下两种: *MVC框架: * 数据库相关操作的Models 视图文件的Views 业务逻辑的Controllers MTV框架: 数据库相关操作的Model ...

  9. [SpringBoot——Web开发(使用Thymeleaf模板引擎)]

    [文字只能描述片段信息,具体细节参考代码] https://github.com/HCJ-shadow/SpringBootPlus 引入POM依赖 <properties> <ja ...

随机推荐

  1. 第02组Beta版本演示

    组长博客 组名:十一个憨比 本组组员: 学号 姓名 分工 贡献比例 181700413 黄智 写Beta冲刺的四次博客,写评审表,写word,统筹规划 9% 131700309 林闽沪 代码实现,答辩 ...

  2. C读取json格式字符串

    python调用C库时参数太多,约定传json格式字符串,C解析 #include<stdio.h> #include<string.h> #include<stdlib ...

  3. docker 部署 HFish(集群部署)

    主节点部署: docker run -d --name hfish-master -p : -p : -p : -p : -p : -p : -p : -p : -p : -p : -p : -p : ...

  4. windows上安装python2和python3虚拟环境

    一.windows上安装 1.安装python 分别安装了Python2和Python3 python3.7默认安装目录 C:\Users\Administrator\AppData\Local\Pr ...

  5. pymysql的基本使用

    序pymysql的语法sql注入问题数据的增删查改 TOC 序 当我们在写程序中需要使用到数据库的时候,尽量在代码层次实现一些限制,例如两张表,我们不再使用外键去关联表与表之间的关系,我们可以在程序层 ...

  6. 【linux】glibc升级

    glibc升级 步骤如下: 1.下载解压glibc wget http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz tar zxvf glibc-2.18.ta ...

  7. 应用层内存溢出/越界/重复释放等问题检查工具(ASan)

    https://github.com/google/sanitizers/wiki https://github.com/google/sanitizers/wiki/AddressSanitizer ...

  8. 解决用navicat远程连接数据库出现1045 access denied for user 'root'@'localhost' using password yes

    在mysql命令行中执行 SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456XXX');  GRANT ALL PRIVILEGES ON * ...

  9. Spring源码系列 — BeanDefinition

    一.前言 回顾 在Spring源码系列第二篇中介绍了Environment组件,后续又介绍Spring中Resource的抽象,但是对于上下文的启动过程详解并未继续.经过一个星期的准备,梳理了Spri ...

  10. python基础之Matplotlib库的使用一(平面图)

    在我们过去的几篇博客中,说到了Numpy的使用,我们可以生成一些数据了,下面我们来看看怎么让这些数据呈现在图画上,让我们更加直观的来分析数据. 安装过程我就不再说了,不会安装的,回去补补python最 ...