狀況1:一般寫頁面都有個模板用來框定頭部LOGO頁面,左側導航菜單,只有右部的內容不一樣。若是不使用模板就大量重複工做。
特別若是頭部或者左側導航須要修改或者添加,全部頁面都須要修改。django 經過模板繼承解決。
狀況2:一個頁面若是內容特別多,不可能都一塊兒寫同一個頁面。好比京東首頁內容很是多。如何解決了?django經過include導入其餘頁面。
1)繼承使用css
步驟1:母板裏寫入block,就能夠被繼承,content是名稱 html
{% block title %} {% endblock%} {% block 「content「 %} {% endblock%}
步驟2:子頁面經過extends指定繼承那個模板jquery
{% extends 'master.html'%} #繼承那個模板 {% block 「content「 %} 這個地方就是替換模板block 「content「 <ul> {% for i in u%} <li>{{i}}</li> {%endfor%} {% endblock%}
2)若是子頁面有本身的css,js 怎麼用了?
A)若是是在子頁面寫CSS和JS,CSS就不是在頭部了,而JS也不是在<body>以前,假如要引用jquery,子頁面寫的JS會在jquery引用前面,就會不生效django
B)繼承CSS與JS都是共有的。
bootstrap
解決方法:url
在模板裏css 和js位置在寫個block塊。而後在block裏引入,在這個block寫本身的js和css
注:block和順序沒有關係spa
3)一個頁面只能繼承一個模板,如何解決了?如何使用多個模板,或者引入其餘頁面code
<% include "a.html" %> 能夠引用屢次htm
4)模板,include,子頁面怎麼渲染?
先把本身渲染成字符串,在拿模板和include渲染,因此不存在渲染問題(能夠把子頁面繼承include當作一個整頁面)blog
#url.py url(r'^tpl1$',views.tpl1), url(r'^tpl2$',views.tpl2), url(r'^tpl3$',views.tpl3), #views.py def tpl1(request): u=[1,2,3] return render(request,"tp1.html",{"u":u}) def tpl2(request): name="alex" return render(request,"tp2.html",{"name":name}) def tpl3(request): status="已修改" return render(request,"tp3.html",{"status":status}) #模塊:master.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title> {% block title %}{% endblock %} <!--這裏用來設置標題--> </title> <link rel="stylesheet" href="/static/common.css"> {% block css %}<!--這裏用來設置子頁面本身的css--> {% endblock %} </head> <body> {% block content %}<!--這裏用來設置子頁面本身的內容--> {% endblock %} <script src="/static/js/jquery-1.12.4.js"></script> <script src="/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script> {% block js %}<!--這裏用來設置子頁面本身的js--> {% endblock %} </body> </html> #子頁面:tp1.html {% extends "master.html" %} <!-- 繼承那個模板--> {% block title %} 用戶管理 {% endblock %} {% block css %} <style> body{ background-color: aqua; } </style> {% endblock %} {% block content %} <h1>用戶管理</h1> <ul> {% for i in u %} <li>{{ i }}</li> {% endfor %} </ul> {% endblock %} #子頁面:tp2.html {% extends "master.html" %} {% block content %} <h1>修改密碼{{ name }}</h1> {% include "tp3.html" %} <!-- 引入其餘頁面--> {% endblock %} #include頁面:tp3.html <div> <input type="text"> <input type="button" value="++"> </div>