為了讓文章(post)按釋出時間逆序排列,即最新發表的文章排在文章清單的最前面,我們對傳回的文章清單進行了排序,即各個視圖函數中都有類似于 <code>post.objects.all().order_by('-created_time')</code> 這樣的代碼,這導緻了很多重複。因為隻要是傳回的文章清單,基本都是逆序排列的,是以我們可以在 post 模型中指定 post 的自然排序方式。
django 允許我們在 models.model 的子類裡定義一個 meta 的内部類,這個内部類通過指定一些屬性來規定這個類該有的一些特性,例如在這裡我們要指定 post 的排序方式。首先看到 post 的代碼:
現在在 post 類的内部定義一個 meta 類,并指定排序屬性:
<code>ordering</code> 屬性用來指定文章排序方式,<code>['-created_time']</code> 指定了依據哪個屬性的值進行排序,這裡指定為按照文章釋出時間排序,且負号表示逆序排列。清單中可以用多個項,比如 <code>ordering = ['-created_time', 'title']</code> ,那麼首先依據 <code>created_time</code> 排序,如果 <code>created_time</code> 相同,則再依據 <code>title</code> 排序。這樣指定以後所有傳回的文章清單都會自動按照 meta 中指定的順序排序,是以可以删掉視圖函數中對文章清單中傳回結果進行排序的代碼了。
導航欄有一個 black & white 的 logo,我們希望點選它就能回到首頁面,隻修修改一下超連結即可。打開 base.html,修改 logo 處的超連結:
另外導航欄還有一個首頁導航按鈕,也希望點選它就能回到首頁面,修改的任務作為練習交給你了。
當然還有一些跳轉可以完善,比如文章标題下有分類、釋出時間、作者、評論量、閱讀量等資訊,可以設定點選分類跳轉到分類頁面;點選評論量就跳轉到文章詳情頁的評論處等,這些細節部分不涉及新知識,就當做練習交給你自己完成了。
有兩處地方顯示的評論量,顯示評論量的方法很簡單。回顧一下我們是如何擷取某篇 <code>post</code> 的下的評論清單的?我們使用的是 <code>post.comment_set.all()</code>。<code>all</code> 方法傳回該 <code>post</code> 關聯的評論清單。此外模型管理器(<code>comment_set</code> 是一個特殊的模型管理器)還有一個 <code>count</code> 方法,傳回的是數量,即 <code>post</code> 下有多少條評論,我們可以直接在模闆中調用這個方法:{{ post.comment_set.count }}。将評論量替換成該模闆變量就可以正确顯示文章的評論數了。
我們通過一個部落格實戰項目,了解了 django 基本的開發技術。包括如何編寫模型(model)、如何編寫視圖函數(view)、如何使用 django 内置的模闆系統(template)以及如何配置路由(url),這四大子產品是 django 開發的核心所在,現在我們已經能夠基本掌握這些子產品的使用方法了。
但是,還沒完...
django 提供的不僅僅是這些,我們的部落格也不僅僅隻有這些功能。如何實作标簽雲效果?如何給部落格提供 rss 訂閱服務?如果實作文章搜尋?如果網站需要提供使用者系統,如何實作使用者的注冊登入?如何部署到伺服器上讓他人通過公網通路?這些需求都可以利用 django 提供的 api 來實作。
另外,django 還有海量的第三方應用來提供更加豐富的功能。比如當他人評論了我的文章時,如何收到通知提醒?網站需要提供新浪微網誌、微信等社交賬号的登入等等,這些都可以借助 django 第三方應用快速完成,而我們自己隻需要寫很少量的代碼就可以了。
如果遇到問題,請通過下面的方式尋求幫助。
将問題的較長的描述通過郵件發送到 [email protected],一般會在 24 小時内回複。