建立其餘網頁來擴充web_app項目,咱們將建立兩個顯示數據的網頁,其中一個列出全部主題,另外一個顯示特定主題的全部條目html
1.建立父模板web
父模板一般包含一些通用元素,並讓每一個網頁都繼承這個模板,而不用再每一個網頁重複定義這些通用元素,這種方法能讓你專一於每一個網頁的獨特方面,而且能夠輕鬆修改項目的總體外觀正則表達式
1>建立一個名爲base.html的模板,並將其存儲在index.html所在的目錄中,base.html包含全部頁面都有的元素;其餘模板都繼承base.html。數據庫
該文件的第一部分建立了一個包含項目名的段落,該段落是一個到主頁的連接,{% %}是一個模板標籤,生成要在網頁中顯示的信息;在這個實例中,模板標籤服務器
{% url 'web_app:index' %}
生成一個URL,該URL與web_app/urls.py中定義的名爲index的URL模式匹配(箭頭1處),在該示例中,web_app是一個命名空間,而index是該命名空間中一個URL模式app
在箭頭2處,插入了一對塊標籤。這個塊名爲content,是一個佔位符,其中包含的信息將由子模版指定函數
注意:子模版並不是必須定義父模板中的每一個塊,所以在父模板中,可以使用任意多個塊來預留空間,而子模版可根據須要定義相應數量的塊url
2.編寫子模版,使其繼承base.html3d
箭頭1處表示將標題替換成了從父模板那裏繼承的代碼,子模版的第一行必須包含標籤{% extends % },讓Django知道它繼承了哪一個父模板htm
箭頭2處插入了一個名爲content的{% block %}標籤,以定義content塊,不是從父模板繼承的內容都包含在content塊中
箭頭3處使用標籤{% endblock content %}指出內容定義的結束位置
3.顯示全部主題的頁面
1>定義顯示全部主題的URL。一般,使用一個簡單的URL片斷來指出網頁的信息;咱們使用topics,所以http://127.0.0.1:8000/topics/將返回顯示全部主題的頁面,修改web_app下的urls.py
箭頭1處在用於主頁URL的正則表達式中添加了topics/,Django檢查請求的URL時,這個模式與這樣的URL匹配:基礎URL後面跟着topics。其URL與該模式匹配的請求多將交給views.py中函數topics()進行處理
2>修改視圖文件views.py
函數topics()須要從數據庫中獲取一些數據,並將其發送給模板
1處導入與所需數據相關聯的模型
2處Django從服務器那裏收到的request對象
3處查詢數據庫--請求提供Topic對象,並按屬性date_added對它們進行排序,並將返回的查詢集存儲在topics中
4處定義一個將要發送給模板的上下文。上下文是一個字典,鍵是咱們將在模板中用來訪問數據的名稱,值是咱們要發送給模板的數據
5處將變量context傳遞給render()
3>模板
顯示全部主題的頁面的模板接受字典context,以便可以使用topics()提供的數據,建立topics.html,並存儲在index.html所在的目錄中
1處表示在標準的HTML中,項目列表被稱爲無序列表,用標籤<ul></ul>表示
2處使用了一個至關於for循環的模板標籤,它遍歷context中的列表topics,注意在模板中,每一個for循環都必須使用{% endfor %}標籤來顯式的指出其結束位置
3處表示每次循環時{{ topic }}都被替換爲topic的當前值
4處的模板標籤{% empty %}表示在列表topics爲空時該怎麼辦
4>修改父模板,使其包含到顯示全部主題的頁面連接
1處在主頁連接後面添加了一個連字符,而後添加了一個到顯示全部主題的頁面連接 -- 使用的也是模板標籤url(箭頭2處)
2行讓Django生成一個連接,它與web_app/urls.py中名爲topics的URL模式匹配
4.運行manage.py