搭建博客筆記:py_kouga (四) 詳情頁面

參考教程

  1. Django博客教程
  2. 自強學(xué)堂

目前打開詳情頁面例嘱,會報錯。所以就來解決一下這個問題。

url 用正則表達式配置

文章詳情頁的的 url 是一個正則表達式际看。

from django.conf.urls import url

from . import views

app_name = 'blog'
urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^post/(?P<pk>[0-9]+)/$', views.detail, name='detail'),
]

(?P<name>...) 是正則表達式的分組的命名模式,取此分組中的內(nèi)容既可以使用索引也可以使用 name

m = re.search(r'^post/(?P<pk>[0-9]+)/$', "post/3/")
if m:
  m.groupdict()
>>> {'pk': '3'}

app_name='blog'

app_name='blog' 告訴 Django 這個 urls.py 模塊是屬于 blog 應(yīng)用的矢否,這種技術(shù)叫做視圖函數(shù)命名空間仲闽。我們看到 blog\urls.py 目前有兩個視圖函數(shù),并且通過 name 屬性給這些視圖函數(shù)取了個別名僵朗,分別是 index赖欣、detail。但是一個復(fù)雜的 Django 項目可能不止這些視圖函數(shù)验庙,例如一些第三方應(yīng)用中也可能有叫 index顶吮、detail 的視圖函數(shù),那么怎么把它們區(qū)分開來粪薛,防止沖突呢悴了?方法就是通過 app_name 來指定命名空間,命名空間具體如何使用將在下面介紹。如果你忘了在 blog\urls.py 中添加這一句湃交,接下來你可能會得到一個 NoMatchReversed 異常熟空。

django reverse 函數(shù)

參考文檔,https://docs.djangoproject.com/en/2.1/ref/urlresolvers/

blog/models.py

from django.db import models
from django.contrib.auth.models import User
from django.urls import reverse
from django.utils.six import python_2_unicode_compatible

@python_2_unicode_compatible
class Post(models.Model):
    ...

    def __str__(self):
        return self.title

    # 自定義 get_absolute_url 方法
    # 記得從 django.urls 中導(dǎo)入 reverse 函數(shù)
    def get_absolute_url(self):
        s = reverse('blog:detail', kwargs={'pk': self.pk})
        return s

注意到 URL 配置中的 url(r'^post/(?P<pk>[0-9]+)/$', views.detail, name='detail') 巡揍,我們設(shè)定的 name='detail' 在這里派上了用場痛阻。看到這個 reverse 函數(shù)腮敌,它的第一個參數(shù)的值是 'blog:detail'阱当,意思是 blog 應(yīng)用下的 name=detail 的函數(shù),由于我們在上面通過 app_name = 'blog' 告訴了 Django 這個 URL 模塊是屬于 blog 應(yīng)用的糜工,因此 Django 能夠順利地找到 blog 應(yīng)用下 name 為 detail 的視圖函數(shù)弊添,于是 reverse 函數(shù)會去解析這個視圖函數(shù)對應(yīng)的 URL,我們這里 detail 對應(yīng)的規(guī)則就是 post/(?P<pk>[0-9]+)/ 這個正則表達式捌木,而正則表達式部分會被后面?zhèn)魅氲膮?shù) pk 替換油坝,所以,如果 Post 的 id(或者 pk刨裆,這里 pk 和 id 是等價的) 是 255 的話澈圈,那么 get_absolute_url 函數(shù)返回的就是 /post/255/ ,這樣 Post 自己就生成了自己的 URL帆啃。

反復(fù)看了幾遍瞬女,才明白為什么起名叫 reverse 函數(shù)。一般而言努潘,都是根據(jù) url 來查找視圖函數(shù)的诽偷。而 reverse 函數(shù)又在中間包了一層。在html 中這樣配置:

 <a href="{{ post.get_absolute_url }}">{{ post.title }}</a>

Django 的模板解釋器肯定會調(diào)用 post.get_absolute_url 這個函數(shù)疯坤,這個函數(shù)的輸出是 post/1报慕,根據(jù)這個路徑再去路由里面去查找相應(yīng)的視圖函數(shù)。這個過程比起直接在 html 中硬編碼压怠,多包了一層函數(shù)眠冈,使得當 url 地址有變動時,不用去滿世界改模板菌瘫。

總結(jié)一下洋闽,這個 reverse 函數(shù)是寫在 models 下面的,reverse 的第一個函數(shù)指明了視圖函數(shù)的位置突梦,其他的可以傳點參數(shù)诫舅。

修改視圖模板

主要是把 single.html 改為 detail.html , 把詳情頁面的鏈接指向 {{ post.get_absolute_url }}。然后我自己又做了一些視圖的繼承與拆分宫患。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末刊懈,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌虚汛,老刑警劉巖匾浪,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異卷哩,居然都是意外死亡蛋辈,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門将谊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來冷溶,“玉大人,你說我怎么就攤上這事尊浓〕哑担” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵栋齿,是天一觀的道長苗胀。 經(jīng)常有香客問我,道長瓦堵,這世上最難降的妖魔是什么基协? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮菇用,結(jié)果婚禮上澜驮,老公的妹妹穿的比我還像新娘。我一直安慰自己刨疼,他們只是感情好,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布鹅龄。 她就那樣靜靜地躺著揩慕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪扮休。 梳的紋絲不亂的頭發(fā)上迎卤,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音玷坠,去河邊找鬼蜗搔。 笑死,一個胖子當著我的面吹牛八堡,可吹牛的內(nèi)容都是我干的樟凄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼兄渺,長吁一口氣:“原來是場噩夢啊……” “哼缝龄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤叔壤,失蹤者是張志新(化名)和其女友劉穎瞎饲,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炼绘,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡嗅战,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了俺亮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驮捍。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖铅辞,靈堂內(nèi)的尸體忽然破棺而出厌漂,到底是詐尸還是另有隱情,我是刑警寧澤斟珊,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布苇倡,位于F島的核電站,受9級特大地震影響囤踩,放射性物質(zhì)發(fā)生泄漏旨椒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一堵漱、第九天 我趴在偏房一處隱蔽的房頂上張望综慎。 院中可真熱鬧,春花似錦勤庐、人聲如沸示惊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽米罚。三九已至,卻和暖如春丈探,著一層夾襖步出監(jiān)牢的瞬間录择,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工碗降, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留隘竭,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓讼渊,卻偏偏與公主長得像动看,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子爪幻,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容