Django也有属于自己的模板继承功能。模板继承可以减少页面重复内容的定义,实现页面重用,更加灵活的实现web页面。主要通过block/extends标签来实现。
目录
Block标签
在父模板中预留区域,子模板去填充
语法
{% block 标签名 %}
内容
{% endblock 标签名 %}
Extends标签
继承模板,需要写在模板文件的第一行
语法
{% extends ‘父模板路径’ %}
示例
定义父模板
创建base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>博客</title>
<style>
#header ul li{
float:left;
list-style:none;
width:50px;
border-left:1px solid #000;
padding-left:20px;
padding-bottom:10px;
}
#header > ul > li.first{
border:none;
}
#content {
height:80%;
clear:both;
}
#footer {
text-align:center;
}
</style>
</head>
<body>
<div id="header">
<ul>
<li class="first"><a href="#">推荐</a></li>
<li><a href="#">Python</a></li>
<li><a href="#">PHP</a></li>
<li><a href="#">Java</a></li>
<li><a href="#">Go</a></li>
</ul>
</div>
<div id="content">
{% block content %}
{% endblock content %}
</div>
<div id="footer">
Powered by: xx网站 Copyright © 2023 Django3.0
</div>
</body>
</html>
定义子模板
创建首页main.html
{% extends 'blog/base.html' %}
{% block content %}
<h2>文章列表</h2>
<ul>
<li><a href="#">Django框架之模板标签</a></li>
<li><a href="#">Django框架之模板继承</a></li>
</ul>
{% endblock content %}
添加路由
path('extend1', views.extend1, name='extend1')
创建视图
def extend1(request):
return render(request, 'blog/content.html')
增加详情页
创建detail.html
{% extends 'blog/base.html' %}
{% block content %}
<h2>Django框架之模板继承</h2>
<p>内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容 <br>
内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容 <br>
内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容 <br>
内容内容内容内容内容。。。。。。</p>
{% endblock content %}
设置路由
path('extendDetail/<int:id>', views.extendDetail, name='extendDetail'),
配置视图
def extendDetail(request, id):
return render(request, 'blog/detail.html')
修改列表链接
<li><a href="{% url 'app:extendDetail' 1 %}">Django框架之模板标签</a></li>
<li><a href="{% url 'app:extendDetail' 2 %}">Django框架之模板继承</a></li>
效果
总结
主要通过block/extends标签来实现。如何应用模板继承写了列表和详情使用的两个例子。具体使用,只需要结合这个例子来实现即可。