您的位置:首页 > 运维架构 > 网站架构

Django开发个人博客网站——18、实现博客的分类

2018-02-04 17:25 881 查看
我们在设计博客的数据库时,分别定义了博客的分类和标签,规定博客与博客的分类为一对多关系,也就是一个博客只能有一个分类,而博客的标签则为多对多的关系,一个博客可以有多个标签。按照功能来划分的话,也就是博客的标签是对博客分类的一个补充。

考虑到我们已经为博客网站设计了标签云,如果再设计一个分类云的话,就显得重复了,为此,我们不再单独创建分类页面,而直接在博客详情页面中添加博客分类的入口,这样既能查询到该博客分类下的所有博客,也避免了功能上的重复。

分类详情页面的设计跟标签详情页面时一模一样的,这里直接给代码。

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: