39.Python模板结构优化-引入模板include标签、模板继承使用详解
在进行模板的构造时,不免有些模板的部分样式会相同,如果每一个模板都是重写代码的话,不仅在做的时候麻烦,而且在后期的维护上,也是相当的麻烦。所以我们可以将模板结构进行优化,优化可以通过:引入模板;模板继承两种方式来实现。
1.引入模板
在DTL模板中,使用include标签,将子模板进行引入,这种引入模板,子模板可以使用父模板中的变量。也就是说子模板中也就会被同化产生一个同父模板相同的变量,但是如果这个子模板同时又被其他的父模板引用的话,这个产生的变量还是存在的。以下举例说明:
在index()视图函数中传递一个变量,就可以在index.html中引用了,
from django.shortcuts import render
# 在index视图函数中,传递一个变量,
def index(request):
context = {
'username':'小蚂蚁'
}
return render(request,'index.html',context=context)
def company(request):
return render(request,'company.html')
def school(request):
return render(request,'school.html')
在index.html中进行引用:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
{% include 'header.html' %}
<div class="content">
<p>这是首页的中间部分哦</p>
<p>{{ username }}</p>
</div>
{% include 'footer.html' %}
</body>
</html>
同时此时也可以在子模板header.html中进行引用变量username:
<header>
<ul>
<li><a href="{% url 'index' %}">首页</a></li>
<li><a href="{% url 'company' %}">公司</a></li>
<li><a href="{% url 'school' %}">校园</a></li>
<li>{{ username }}</li>
</ul>
</header>
在浏览器中查看结果:
由浏览器的输出信息,可以看出username并没有进行显示。这是因为在include标签中没有进行接收。
在company页面的header部分也不能够显示username
在index.html中,使用with 变量名=“xxx”的形式进行接收:
{% include 'header.html' with username='小蚂蚁'%}
<div class="content">
<p>这是首页的中间部分哦</p>
<p>{{ username }}</p>
</div>
{% include 'footer.html' %}
在浏览器中进行显示查看:
在company.html中使用with 变量名="xxx"的形式进行接收:
{% include 'header.html' with username='孤烟逐云' %}
<div class="content">
hello 这是贵公司的中间部分哦
</div>
{% include 'footer.html' %}
但是在浏览器中会显示:
为什么会出现错误呢?再来看一下views.py中的company()视图函数:
def company(request):
# 定义一个上下文,变量为username
context = {
'username':''
}
return render(request,'company.html',context=context)
在浏览器中进行查看:
此时就可以进行显示了。
2.模板继承
(1)如果在某个“block”中使用父模板的内容,那么就可以使用“{{ block.super }}”来继承。
(2)在定义“block”的时候,除了在“block”开始的地方定义这个“block” 的名字,比如{ % block content %}还可以在“block”结束的地方定义名字,比如{ % endblock content %}。这在大型魔板中尤其有用,能让你快速的看到这个“block” 包含在哪里。
(3)注意:extends标签必须放在模板的代码的最前面位置,并且子模板中的代码必须放在block中,否者将不会被渲染。
views.py中代码如下:
from django.shortcuts import render
def index01(request):
return render(request,'index01.html')
def company(request):
return render(request,'company.html')
def school(request):
return render(request,'school.html')
父模板base.html中的代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<header>
<ul>
<li><a href="{% url 'index' %}">首页</a></li>
<li><a href="{% url 'company' %}">公司</a></li>
<li><a href="{% url 'school' %}">校园</a></li>
</ul>
</header>
<div class="content">
{% block content %}
这是父模板中的content的代码
{% endblock %}
</div>
<footer>
这是footer中的部分哦
</footer>
</body>
</html>
在子模板index01.html中实现继承:
{# extends导入父模板必须是在代码的最上方 #}
{% extends 'base.html' %}
{% block content %}
{# 在子模板中实现自己的中间部分代码 #}
<p>这是子模板中的代码</p>
{# 使用以下语句就可以引用父模板中的代码 #}
<p>{{ block.super }}</p>
{% endblock %}
在urls.py中做一层这样的映射:
from front import views as fviews
urlpatterns = [
path('index01/', fviews.index01, name = 'index01'),
]
在浏览器中查看127.0.0.1:8000/index01/视图:
同样使用这种方式也可以实现模板结构的优化
39.Python模板结构优化-引入模板include标签、模板继承使用详解的更多相关文章
- (转)python中调用R语言通过rpy2 进行交互安装配置详解
python中调用R语言通过rpy2 进行交互安装配置详解(R_USER.R_HOME配置) 2018年11月08日 10:00:11 luqin_ 阅读数:753 python中调用R语言通过r ...
- python通过socket实现多个连接并实现ssh功能详解
python通过socket实现多个连接并实现ssh功能详解 一.前言 上一篇中我们已经知道了客户端通过socket来连接服务端,进行了一次数据传输,那如何实现客户端多次发生数据?而服务端接受多个客户 ...
- Python 自动化测试全攻略:五种自动化测试模型实战详解
随着移动互联网的发展,软件研发模型逐步完善,软件交付质量越来越受到软件公司的重视,软件测试技术特别是自动化测试技术开始在软件系统研发过程中发挥着越来越重要的作用. 与传统的手工测试技术相比,自动化测试 ...
- Python基础之 urllib模块urlopen()与urlretrieve()的使用方法详解。
Python urllib模块urlopen()与urlretrieve()的使用方法详解 1.urlopen()方法urllib.urlopen(url[, data[, proxies]]) ...
- 如何用Python来处理数据表的长宽转换(图文详解)
不多说,直接上干货! 很多地方都需用到这个知识点,比如Tableau里. 通常可以采取如python 和 r来作为数据处理的前期. Tableau学习系列之Tableau如何通过数据透视表方式读取 ...
- 小白学python之整型,布尔值,十进制二进制转换和字符串详解for循环!
整型与字符串转化 十进制转二进制. python2,存在int 整型和long(长整型),在python3里就是int/获取的是浮点数 小数 print(bin(15)) 这样可以通过代码来计算十进制 ...
- 第15.41节、PyQt(Python+Qt)入门学习:输入部件QComboBox组合框功能详解
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.概述 Designer中输入工具部件中的Combo Box组合框与 ...
- 第15.29节 PyQt(Python+Qt)入门学习:containers容器类部件QScrollArea滚动区域详解
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 Scroll Area提供了一个呈现在其他部件上的可滚动区域视图,滚动区域用于显示框架内的 ...
- Django模板结构优化{% include %}和{% extend %}标签
https://blog.csdn.net/xujin0/article/details/83420633
随机推荐
- 关于c/c++语言的EOF(C++实现闰年判断)
EOF 是 End Of File 的缩写,在 C 语言标准库中的定义如下: #define EOF (-1) 迄今为止,关于 EOF 作用的观点各异.大多数程序员认为“文件中有一个 EOF 字符,用 ...
- CAD制图系列之如何画内切圆
今天我将记录我们如何画一个大圆,里面均匀内切四个小圆 具体步骤如下: 第一步:首先,先画一个十字架,用于作为轴 第二步:以十字架交点为圆心,画一个半径为25的圆 第三步:以中点为坐标画四十五度斜线,方 ...
- Eclipse中文语言包安装和设置中文
对于英语水平不好或者初学者来说使用中文开发环境可以有效提高学习效率,便于快速的学习和上手,不过对于当前的技术环境学习英语还是非常有必要的,当对Eclipse掌握到一定程度还是应该多使用英语环境来开发, ...
- 透彻分析和解决一切javaWeb项目乱码问题
前言 乱码是我们在程序开发中经常碰到且让人头疼的一件事,尤其是我们在做javaweb开发,如果我们没有清楚乱码产生的原理,碰到乱码问题了就容易摸不着头脑,无从下手. 乱码主要出现在两部分,如下: 第一 ...
- 基于 H5与webGL 的低碳工业园区监控系统
前言 低碳工业园区的建设与推广是我国推进工业低碳转型的重要举措,低碳工业园区能源与碳排放管控平台是低碳工业园区建设的关键环节.如何对园区内的企业的能源量进行采集.计量.碳排放核算,如何对能源消耗和碳排 ...
- 调用caffe脚本将图片转换为了lmdb格式
#!/usr/bin/env sh # Create the imagenet lmdb inputs # N.B. set the path to the imagenet train + val ...
- 2019牛客多校2 F Partition problem(dfs)
题意: n<=28个人,分成人数相同的两组,给你2*n*2*n的矩阵,如果(i,j)在不同的组里,竞争力增加v[i][j],问你怎么分配竞争力最 4s 思路: 枚举C(28,14)的状态,更新答 ...
- Codeforces 922 E Birds (背包dp)被define坑了的一题
网页链接:点击打开链接 Apart from plush toys, Imp is a huge fan of little yellow birds! To summon birds, Imp ne ...
- 《Python学习手册 第五版》 -第6章 动态类型
本章主要讲述变量.对象.引用三者直接的关联及区别,详细说明了在变量赋值的操作中,计算机内部到底发生了什么,有哪些是不被人察觉和需要明确了解的 1.先从最简单的赋值语句开始 a=3 这一句,基本就能涵盖 ...
- C# 把带有父子关系的数据转化为------树形结构的数据 ,以及 找出父子级关系的数据中里面的根数据Id
紧接上一篇,将List<Menu>的扁平结构数据, 转换成树形结构的数据 返回给前端 , 废话不多说,开撸! --------------------- 步骤: 1. 建 Menu ...