其实就是利用{% 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