假如我們有以下模板index.html,代碼為:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div>網頁公共頭部部分</div> <h2> 網頁body部分 </h2> <div>網頁公共底部部分</div> </body> </html>
做過web開發的童鞋知道大部分網頁的公共頭部,公共底部部分代碼每個頁面都一樣,那么就應該將其單獨拿出做為一個html, 這樣修改這部分代碼時候,不需要每個頁面都修改, 所以在django中我們可以這么做:
top.html
<div>網頁公共頭部部分</div>
bottom.html
<div>網頁公共底部部分</div>
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% include 'top.html' %} <h2> 網頁body部分 </h2> {% include 'bottom.html' %} </body> </html>
我們可以使用django模板引擎的Include語法,來將單獨的頁面包含到當前模板頁面中。有同學有疑問,那我們通過視圖傳遞給模板的上下文,在被包含的模板中可以使用嗎?可以直接使用。
假如我們有如下視圖:
def index(request): return render(request, 'index.html', {'a': 100, 'b': 200})
該django的視圖函數,傳遞給模板並渲染模板。
top.html修改如下:
<div>網頁公共頭部部分:{{ a }}</div>
這么使用是沒有問題的。
我這里有這樣的一個問題,假如所有的頁面都使用共同的頭部top.html, 可能針對1.html 2.html 3.html所使用的頭部有些樣式不一樣,所需top.html:
<div classs='acss'>網頁公共頭部部分</div>
但是對於5.html, 6.html使用的頭部樣式為:
<div class='bcss'>網頁公共頭部部分</div>
很顯然,如果直接通過include方式包含公共頭部,會導致一些頁面顯示問題。既然部分參數不一樣,include允許我們傳遞參數給被include的模板,我們可以使用with語法,那么問題解決如下:
{{ % include 'top.html' with mycss='acss' % }}
top.html可修改如下:
<div class='{{mycss}}'>網頁公共頭部部分</div>
被包含模板中部分參數,由我們include的時候動態指定,那么top.html就不會因為細微差別而編寫多份代碼了。