其实就是利用{% block xxx %} {% endblock %}的方式定义一个块,相当于占位。存放在某个html中,比如base.html
然后在需要实现这些块的文件中,使用继承{% extends "base.html" %}的方式引入母板文件,然后在{% block xxx %}......{% endblock %}块定义中实现具体的内容。
base.html示例:注意块的定义。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
<!DOCTYPE html>
< html lang = "zh-CN" >
< head >
< meta charset = "utf-8" >
< meta http-equiv = "X-UA-Compatible" content = "IE=edge" >
< meta name = "viewport" content = "width=device-width, initial-scale=1" >
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
< meta name = "description" content = "" >
< meta name = "author" content = "" >
< link rel = "icon" href = "http://v3.bootcss.com/favicon.ico" rel = "external nofollow" >
< link rel = "stylesheet" href = "https://cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.css" rel = "external nofollow" >
< title >所有的书都在这里</ title >
{% block page_css %}
{% endblock %}
{% block page_js %}
{% endblock %}
<!-- Bootstrap core CSS -->
< link href = "https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel = "external nofollow" rel = "stylesheet" >
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
< link href = "http://v3.bootcss.com/assets/css/ie10-viewport-bug-workaround.css" rel = "external nofollow" rel = "stylesheet" >
<!-- Custom styles for this template -->
< link href = "http://v3.bootcss.com/examples/dashboard/dashboard.css" rel = "external nofollow" rel = "stylesheet" >
<!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
<!--[if lt IE 9]><script src="http://v3.bootcss.com/assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
< script src = "http://v3.bootcss.com/assets/js/ie-emulation-modes-warning.js" ></ script >
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</ head >
< body >
{% include "nav.html" %}
< div class = "container-fluid" >
< div class = "row" >
< div class = "col-sm-3 col-md-2 sidebar" >
< ul class = "nav nav-sidebar" >
< li class = "{% block book_class %}{% endblock %}" >< a href = "/book_list/" rel = "external nofollow" >所有的书 < span class = "sr-only" >(current)</ span ></ a >
</ li >
< li class = "{% block publisher_class %}{% endblock %}" >< a href = "/publisher_list/" rel = "external nofollow" >出版社</ a ></ li >
< li class = "{% block author_class %}{% endblock %}" >< a href = "/author_list/" rel = "external nofollow" >作者</ a ></ li >
</ ul >
</ div >
< div class = "col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main" >
{% block main_body %}
{#这里是每个页面不同的部分#}
{% endblock %}
</ div >
</ div >
</ div >
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
< script src = "https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js" ></ script >
< script >window.jQuery || document.write('< script src = "http://v3.bootcss.com/assets/js/vendor/jquery.min.js" ><\/script>')</ script >
< script src = "https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js" ></ script >
<!-- Just to make our placeholder images work. Don't actually copy the next line! -->
< script src = "http://v3.bootcss.com/assets/js/vendor/holder.min.js" ></ script >
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
< script src = "http://v3.bootcss.com/assets/js/ie10-viewport-bug-workaround.js" ></ script >
</ body >
</ html >
|
某个继承页:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
{ # 继承母板 #}
{ % extends 'base.html' % }
{ % block book_class % }
active
{ % endblock % }
{ % block page_css % }
{ % load static % }
<link rel = "stylesheet" href = "{% get_static_prefix %}book_list_only.css" rel = "external nofollow" >
{ % endblock % }
{ #把自己页面的内容,填入母板里面相应的位置#}
{ % block main_body % }
<div class = "panel panel-primary" >
<div class = "panel-heading" >
<h3 class = "panel-title" >我是自定义内容,用来替换母板中指定的位置< / h3>
< / div>
<div class = "panel-body" >
<div class = "row" >
<div class = "col-md-8" > < / div>
<div class = "col-md-4" ><a href = "/add_book/" rel = "external nofollow" rel = "external nofollow" class = "btn btn-primary" ><i class = "fa fa-plus-square" >< / i> 添加新书< / a>
<a href = "/add_publisher/" rel = "external nofollow" rel = "external nofollow" class = "btn btn-success" ><i class = "fa fa-plus-square" >< / i> 添加出版社< / a>< / div>
< / div>
<table class = "table table-dark table-hover" >
<thead>
<tr>
<th> #</th>
<th> id < / th>
<th>名称< / th>
<th>出版社< / th>
<th>操作< / th>
< / tr>
< / thead>
<tbody>
{ % for b in books % }
<tr>
<td>{{ forloop.counter }}< / td>
<td>{{ b. id }}< / td>
<td>{{ b.title }}< / td>
<td>{{ b.publisher.name }}< / td>
<td>
<a href = "/del_book/?id={{ b.id }}" rel = "external nofollow" class = "btn btn-danger" ><i class = "fa fa-trash fa-fw" >< / i>删除< / a>
<a href = "/edit_book/?id={{ b.id }}" rel = "external nofollow" class = "btn btn-info" ><i class = "fa fa-pencil fa-fw" >< / i>编辑< / a>
< / td>
< / tr>
{ % endfor % }
< / tbody>
< / table>
< / div>
< / div>
{ % endblock % }
|
另一个继承页:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
{ % extends "base.html" % }
{ % block main_body % }
<div class = "panel panel-primary" >
<div class = "panel-heading" >
<h3 class = "panel-title" >所有的出版社< / h3>
< / div>
<div class = "panel-body" >
<div class = "row" >
<div class = "col-md-8" > < / div>
<div class = "col-md-4" ><a href = "/add_book/" rel = "external nofollow" rel = "external nofollow" class = "btn btn-primary" ><i class = "fa fa-plus-circle fa-fw" >< / i>添加新书< / a>
<a href = "/add_publisher/" rel = "external nofollow" rel = "external nofollow" class = "btn btn-success" ><i class = "fa fa-plus-circle fa-fw" >< / i>添加出版社< / a>< / div>
< / div>
<table class = "table table-dark table-hover" >
<thead>
<tr>
<th> #</th>
<th> id < / th>
<th>名称< / th>
<th>地址< / th>
<th>操作< / th>
< / tr>
< / thead>
<tbody>
{ % for p in publisher % }
<tr>
<td>{{ forloop.counter }}< / td>
<td>{{ p. id }}< / td>
<td>{{ p.name }}< / td>
<td>{{ p.addr }}< / td>
<td>
<a href = "/del_publisher/?id={{ p.id }}" rel = "external nofollow" class = "btn btn-danger" ><i class = "fa fa-remove fa-fw" >< / i>删除< / a>
<a href = "/edit_publisher/?id={{ p.id }}" rel = "external nofollow" class = "btn btn-info" ><i class = "fa fa-edit fa-fw" >< / i>编辑< / a>
< / td>
< / tr>
{ % endfor % }
< / tbody>
< / table>
< / div>
< / div>
{ % endblock % }
{ % block publisher_class % }
active
{ % endblock % }
|
完整的练习项目代码:day63_base.rar
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://www.cnblogs.com/frx9527/p/django_base.html