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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值