Django搭建部落格(四) 渲染前資料的處理

2021-08-28 12:52:37 字數 3261 閱讀 4499

2018-07-21

但是 django的預設日期顯示的格式卻是這樣的:

july 30, 2018

簡直要急死強迫症,估計大多數人都不太能接受這種日期顯示格式,所以我們得改一改。

乙個簡單得方法就是不直接在模板裡使用date屬性,而是使用date屬性的yearmonthday屬性來拼湊我們所需的日期格式。

比如,在模板中我們可以這樣寫:

}-}-}

# 2018-7-30

這樣可以獲得我們所需要的格式,不過這樣的編碼方式會給日後的維護帶來很多麻煩。

比如說,我突然想換個日期顯示的格式,那就得乙個頁面乙個頁面地去改**。

乙個更好地方法是,將日期顯示格式封裝為乙個方法,我們呼叫這個方法來獲取格式化後的日期。

這樣當以後需要改變日期顯示格式時,就只需要改一下這個方法就夠了,而不用關心哪些頁面呼叫了這個方法。

說了這麼多,其實我們只要給 post類新增乙個方法就可以了,因為 django是支援在模板裡呼叫例項的方法的。

開啟 models檔案,為 post類新增get_format_date方法:

from django.db import models

class post(models.model):

title = models.charfield(max_length=50)

content = models.textfield()

tags = models.charfield(max_length=50)

date = models.datefield()

def get_format_date(self):

return f'--'

這裡字串前面的 f類似與 format方法,不過這樣更直觀。

新增完成之後,我們只需要在需要顯示日期的地方呼叫get_format_date方法就行,如下:

}

# 2018-7-30

這樣可以達到和之前一樣的效果,而且更便於維護,呼叫形式也更簡單。

順著這個思路,我們很容易就能想到怎麼顯示文章摘要。

給 post類再新增乙個方法get_breif_content來獲取文章摘要

from django.db import models

class post(models.model):

title = models.charfield(max_length=50)

content = models.textfield()

tags = models.charfield(max_length=50)

date = models.datefield()

def get_format_date(self):

return f'--'

def get_brief_content(self):

return f'...'

這裡為了效果明顯一些,設定了只顯示前 5個字元,實際顯示中比這要多,而且也不一定就是顯示前多少個字元,也可以是顯示第乙個自然段。

這些顯示的細節就留到以後再進行優化。

from django.db import models

class post(models.model):

title = models.charfield(max_length=50)

content = models.textfield()

tags = models.charfield(max_length=50)

date = models.datefield()

def get_format_date(self):

return f'--'

def get_brief_content(self):

return f'...'

def get_absolute_url(self):

return f'//'

現在鏈結有了,我們還需要新增對應的檢視和鏈結

先建立乙個 article模板,繼承自 base模板:

}date:}||}

}

然後在 views裡新增乙個 article檢視:

# views.py

def article(request, title):

post = post.objects.filter(title=title).get()

return render(

request,

'myblog/article.html',})

這裡的 article檢視接受乙個從鏈結裡提取出來的 title作為引數。

# urls.py

from django.urls import re_path

from . import views

urlpatterns = [

re_path(r'^index/$', views.index),

re_path(r'^article/\d/\d/(?p.+)/$', views.article),

]

這時訪問 會得到以下頁面:

到現在我們已經完成兩個頁面了,乙個部落格的基本功能都已經具備。

我的第一條部落格
我的第一條部落格/
就會報錯,顯示頁面不存在。

這是因為我們在鏈結的正規表示式:

(r'^article/\d/\d/(?p.+)/$')

裡使用了貪婪模式,在這個模式下鏈結最後的反斜槓也會被匹配到 title裡去,這樣一來資料庫裡就查不到對應的文章,在頁面渲染的時候就會報錯。

但是如果使用非貪婪模式的話就只能匹配第乙個字元... ...

Django搭建簡易部落格

django簡易部落格,主要實現了以下功能 連線資料庫 建立超級使用者與後台管理 利用django admin bootstrap美化介面 template,view與動態url markdown與 高亮 歸檔,aboutme和標籤分類 搜尋與readmore rss與分頁 需要新增的安裝包 要注意...

Django 系列部落格(四)

本篇部落格介紹 django 如何和資料庫進行互動並且通過 model 進行資料的增刪查改 比如在大名鼎鼎的 pythonweb 框架 django 就是使用了物件關係對映,這個對應 django 中的 model檔案。from django.db import models create your...

django 搭建自己的部落格

園子裡很多django自建部落格的教程,當然我們也用django,因為簡單。最新版是1.8,官方文件很全面,所有內容都能找到。歷時三天,基本功能搞完,後續還會做一些修改。還是先貼成果吧,後面慢慢講用到的技術和過程 pycharm ptvs pycharm我覺得目前最好用的python開發環境,各種p...