Django開發個人部落格網站——18、實現部落格的分類
阿新 • • 發佈:2019-02-12
我們在設計部落格的資料庫時,分別定義了部落格的分類和標籤,規定部落格與部落格的分類為一對多關係,也就是一個部落格只能有一個分類,而部落格的標籤則為多對多的關係,一個部落格可以有多個標籤。按照功能來劃分的話,也就是部落格的標籤是對部落格分類的一個補充。
考慮到我們已經為部落格網站設計了標籤雲,如果再設計一個分類雲的話,就顯得重複了,為此,我們不再單獨建立分類頁面,而直接在部落格詳情頁面中新增部落格分類的入口,這樣既能查詢到該部落格分類下的所有部落格,也避免了功能上的重複。
分類詳情頁面的設計跟標籤詳情頁面時一模一樣的,這裡直接給程式碼。
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。