1. 程式人生 > >Django開發個人部落格網站——18、實現部落格的分類

Django開發個人部落格網站——18、實現部落格的分類

我們在設計部落格的資料庫時,分別定義了部落格的分類和標籤,規定部落格與部落格的分類為一對多關係,也就是一個部落格只能有一個分類,而部落格的標籤則為多對多的關係,一個部落格可以有多個標籤。按照功能來劃分的話,也就是部落格的標籤是對部落格分類的一個補充。

考慮到我們已經為部落格網站設計了標籤雲,如果再設計一個分類雲的話,就顯得重複了,為此,我們不再單獨建立分類頁面,而直接在部落格詳情頁面中新增部落格分類的入口,這樣既能查詢到該部落格分類下的所有部落格,也避免了功能上的重複。

分類詳情頁面的設計跟標籤詳情頁面時一模一樣的,這裡直接給程式碼。

1、建立模板

可以直接將tag-detail.html直接複製重新命名為category-detail.html即可,因為他們看起來是一樣的。

category-detail.html

{% extends 'base.html' %}{% block title %}{{ category_name }}分類
{% endblock %}{% block content %}
<div class="content-wrap">
...
{% endblock %}

這裡面寫法同標籤詳情頁是一樣的,這裡不再贅述了,不要忘了新增上分頁。

2、建立檢視函式

view.py

class CategoryDetaiView(View):

    def get(self, request, category_name)
:
category = Category.objects.filter(name=category_name).first() cate_blogs = category.blog_set.all() # 分頁 try: page = request.GET.get('page', 1) except PageNotAnInteger: page = 1 p = Paginator(cate_blogs, 5, request=request) cate_blogs = p.page(page) return
render(request, 'category-detail.html', { 'cate_blogs': cate_blogs, 'category_name': category_name, })

3、建立url

urls.py

from myblog.views import CategoryDetaiView

url(r'^category/(?P<category_name>\w+)/$', CategoryDetaiView.as_view(), name='category_name'),

4、修改模板

修改主頁和部落格詳情頁的模板,將分類url新增進來。

index.html

<a href="{% url 'category_name' blog.category.name %}" itemprop="url" rel="index">
    <span itemprop="name">{{ blog.category.name }}</span>
</a>

同樣別忘了在部落格詳情頁面中將分類的url新增進來。

——————————————————————————————————————————

專案的完整程式碼:django_blog
覺得有用的歡迎給個star。