在介紹具體的技術之前,先介紹在什麼樣的場景中,需要使用這樣的技術,我覺得這對於新手理解起來很重要。官方介紹如下:一般來說,要渲染乙個頁面我們就需要新建乙個對應的模板,然而乙個系統中,多個頁面常常會有很多功能相似的內容區域,比如都有頭部欄、側邊欄、底部資訊欄等等,這樣的內容區域是多個頁面共有的,如果我們不思考採用新的技術方式,而是把在每個頁面都寫一遍這種共有內容的**,不僅是**重複的問題,而且會導致管理的混亂,比如要修改或者檢查等等。
這裡我們可以先想想python中是如何解決這個問題的,python**會將公共使用的**或者方法寫在乙個庫(常常是乙個py檔案中),哪些py需要用到這部分內容則「匯入」這部分內容。
html模板技術也是在解決這一問題,不過使用的是另一種思路,它會將共有的內容**做成母版,那些要用到這個**的則是子版,需要先繼承母版,再編寫子版對應的功能**。這一點有點像幻燈片。
本文主要參考文件: template-inheritance
模板繼承是django模板引擎中功能最強大的部分,也是最複雜的部分。這裡用我之前的**(本章第一節展示過的)作為示例來講解下模板繼承模板繼承允許你構建乙個基本的「骨架」模板,它包含你**的所有公共元素,並定義子模板可以覆蓋的塊(即子模板可以自定義編輯的區域)。
首先是background.html
:
學生選課管理系統
student course management system
這個就是我們的母版。
官方文件一般稱其為html骨架文件,習慣用base.html
來命名,「子」模板的工作就是用內容填充骨架中的空塊。
那麼哪些是子模板可以填充的空塊呢?
我們觀察下上面和普通html語法格格不入的**塊,有兩塊:
這兩塊就是子模板可以進行填充的,即子模板可以自定義內容的。
其中block
是塊標記,所做的只是告訴模板引擎子模板可以覆蓋模板的那些部分。
block
後面接的一串字串是這個塊的名字,可以認為是乙個辨識用的id,後面子模板會用這個id去標明自己要覆蓋哪個。
endblock
則是乙個沒有具體意義的結束符,用於標明block
這個塊到這裡為止。
母版初步介紹完了,接下來我們看看子版login_home.html
學生登入
教師登入
其中第一行的extends
標籤是關鍵:它告訴模板引擎,這個模板「繼承」另乙個模板。
注:extends
必須在第一行寫。
當模板系統計算這個模板時,它首先定位父模板——在本例中是background.html
。
然後,模板引擎將注意到background.html
中的兩個block
塊標記,並用子模板的對應block
快內容替換這些塊。
上面的例子中,login_home.html
的值,輸出可能如下所示:
學生選課管理系統
student course management system
學生登入
教師登入
注意,由於子模板沒有定義welcome_message
塊,所以使用了父模板的值(在上面的例子中是乙個空值)。父模板中標記內的內容總是用作這樣一種場景裡的回退。
同時,在子模板中,也可以新增新的block塊給下一級子模板使用,即子模板本身也可以作為乙個母版。
實際中,可以根據需要使用任意多層的繼承級別。
Django教程 Django模板
如何向請求者返回乙個漂亮的頁面呢?肯定需要用到html css,如果想要更炫的效果還要加入js,問題來了,這麼一堆字串全都寫到檢視中,作為httpresponse 的引數嗎?先看看如何拼接html 圖書首頁 if request.method get res html books 射鵰英雄傳 神鵰俠...
Django模板筆記
有些模版 是重複的。因此可以單獨抽取出來,以後 需要用到,就直接使用include進來就可以了。如果想要在include子模版的時候,傳遞一些引數,那麼可以使用with 的形式。示例 如下 在前端頁面開發中。有些 是需要重複使用的。這種情況可以使用include標籤來實現。也可以使用另外乙個比較強大...
Django 模板筆記
變數 檢視傳遞給模板的資料,要遵循識別符號規則 語法 注意 如果變數不存在,則插入的是空字串 在模板中使用點語法 1 字典 2 屬性或者方法 3 數字索引 在模板中呼叫物件中的方法,不能傳遞引數 語法 作用 1 在輸出中建立文字 2 控制邏輯或者迴圈 格式 語句 語句語句2 格式 語句語句2 注意 ...