1. 程式人生 > >Django開發部落格(四)——建立文章列表

Django開發部落格(四)——建立文章列表

背景

部落格系統還需要有一個分類列表來展示某一個分類下的文章,在之前的文章中我們在資料庫中留了一個type欄位,用來儲存文章的型別。部落格的最上方,列出了自己部落格的分類。我們就按照這個分類來做文章的區分,點選某個標籤,就把文章內容全部顯示出來。

版本相關
作業系統:Mac OS X EI Caption
Python版本:3.4
Django版本:1.9
IDE:PyCharm

思路

思路依然是一個很簡單的思路。首先建立一個地址來接收點選後跳轉的頁面。由於我們自己定好了分類,這個連結可以直接定一個硬連結,簡單粗暴。跳轉到哪個頁面後,根據這個型別去資料庫抓取所有的文章,再傳遞給列表的模版,最後用for迴圈把所有資料打出來,就over了。

url的定義

這次我給標題定義的是 url(r’^python/’, views.python, name=’python’) 畢竟這裡需要使用的連結只有這麼幾個。url定了之後,就需要修改模版的url跳轉和檢視函式對於這個跳轉的處理了

檢視函式

新建一個python的函式,用來處理這部分邏輯,同理,這裡也是寫死的,跳轉到這個介面就要顯示Python的資訊,因此我們要去資料庫抓取type=Python的所有資料,返回給模版

views.py

def python(request):
    sql = 'select id, blog_title, blog_type, blog_timestamp, blog_body from grzx_blogbody WHERE blog_type = "Python"'
python_blog = BlogBody.objects.raw(sql) return render(request, 'python_list.html', {'python_blog': python_blog})

這裡也可以使用python_blog = BlogBody.objects.filter(blog_type=’Python’)來代替執行sql語句,效果是一樣的。

模版修改

下載的模版檔案中有一個list.html,把它名稱改為python_list.html。我們就有一個展示文章列表的頁面了。把裡面ul標籤的內容全部改為for迴圈打出檢視函式返回的內容就行了

python_list.html

<ul>
    {% for x in python_blog %}
        <p class="ptit"><b><a href="{% url 'article' x.id %}"> {{ x.blog_title }}</a></b></p>
        <p class="ptime">釋出時間:{{ x.blog_timestamp }} 作者:{{ x.blog_author }}  分類:{{ x.blog_type }} </p>
        <div class="pcon">{{ x.blog_body }}</div>
        <div class="line"></div>
    {% endfor %}
</ul>

這裡我已經把一些累贅的東西去掉了,比如圖片,還有一些沒必要存在的A標籤。每一個列表需要實現點選跳轉到文章詳情,這裡就要利用到我們上次使用的A標籤中的url跳轉方式。{% url ‘article’ x.id %}。詳細可參照《Django開發部落格(三)——在新的頁面展示文章》。
這裡其實還會遇到一個問題,如果文章的內容太大,由於我們沒有做限制,列表就會把所有的內容顯示出來。這樣其實就做成了一個文章的展示列表,而不是我們想要的標題+內容的展示列表。這個地方用Python來實現比較折騰,要先從資料庫取出文章內容的資料,再做限制,我們可以用一個簡單的CSS來做處理。程式碼如下

view.css

.pcon{line-height:3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}

把view.css中的.pcon加上white-space:nowrap;overflow:hidden;text-overflow:ellipsis;就搞定了。現在點選檢視,就有點部落格文章列表的樣子啦!

後記

可以根據這個方式,把相關的型別全部都搭建起來,文章分類就解決了,當然,還有一些不足,比如列表的分頁,文章的錄入,編輯、評論系統等功能還沒有搭建起來。