1.前言
django模板繼承的作用:模板可以用繼承的方式來實現複用,減少冗餘內容。
一般來說,一個網站裏一般存在多個網頁的頭部和尾部內容都是一致的,我們就可以通過模板繼承來實現複用。
父模板用於放置可重複利用的內容,子模板繼承父模板的內容,並放置自己的內容。
2.父模板
標籤 block...endblock: 父模板中的預留區域,該區域留給子模板填充差異性的內容,不同預留區域名字不能相同。
{% block 名稱1 %}
預留給子模板的區域,可以設置設置默認內容
{% endblock 名稱1 %}
{% block 名稱2 %}
預留給子模板的區域,可以設置設置默認內容
{% endblock 名稱2 %}
3.子模板
子模板使用標籤 extends 繼承父模板:
{% extends "父模板路徑"%}
子模板如果沒有設置父模板預留區域的內容,則使用在父模板設置的默認內容,當然也可以都不設置,就爲空。
子模板設置父模板預留區域的內容:
{ % block 名稱 % }
內容
{% endblock 名稱 %}
4.調試過程
4.1.接下來我們在django項目【helloworld】的【helloworld/hello/templates】 裏新增一個【base_001.html】 文件,代碼如下:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>父模板</title> </head> <body> <h1>Hello World!</h1> <p>這是父模板!</p> {% block mainbody %} <p>original</p> {% endblock %} </body> </html>
以上代碼中,名爲mainbody的block標籤是可以被繼承者們替換掉的部分。
所有的 {% block %} 標籤告訴模板引擎,子模板可以重載這些部分。
4.2.接下來我們在django項目【helloworld】的【helloworld/hello/templates】 裏新增一個【zilei_001.html】 文件,代碼如下:
{%extends "base_001.html" %} {% block mainbody %} <p>繼承了 [base_001]這個html 文件</p> {% endblock %}
我們可以看到,zilei_001.html 中繼承 base_001.html,並替換特定 block裏的內容。
第一行代碼說明 zilei_001.html 繼承了base_001.html。可以看到,在zilei_001.html裏相同名字的 block 標籤用以替換 base_001.html裏的相應 block的內容。
4.3.編寫對應的一個新的視圖函數【zilei_one】和一個新的url匹配規則【url(r"^zilei0001/$",views.zilei_one)】。
4.4.啓動django項目【helloworld】,然後在任一瀏覽器輸入地址【http://127.0.0.1:8000/zilei0001/】,可以看到正確的展示結果: