美文网首页
Django博客优化 文章归档

Django博客优化 文章归档

作者: 早_wsm | 来源:发表于2020-12-08 14:30 被阅读0次

    前言

    为博客添加文章归档功能

    添加URL

    urlpatterns = [
    ....
        path('archives/<int:year>/<int:month>', views.archives, name='archives'),  # 归档
    ....
    ]
    

    Django2.x与3.x对路由的使用有些许差别,注意自己的版本,我这里使用的是Django3

    添加VIEW

    文章归档实现的方法有很多,我这里为了实现功能使用了datetimes函数,通过他可以选出数据库中Article对应的created_time(每个博客创建model时都会存入created_time字段),并且可以任意指定精度。
    我们可以选出全部文章对应的发表时间,精确到月份!

    # 文章归档
    def archives(request, year, month):
        dates = Article.objects.datetimes('created_time', 'month', order='DESC')
        article_list = Article.objects.filter(created_time__year=year, created_time__month=month).order_by('-views')
        # count = article_list.count()
        # 为了保证进入archives.html时显示其他信息,这里加入了以下代码,当然此处代码可以不加,取决于你的archives.html要展示为什么样子
        allcategory = Category.objects.all().order_by('index')
        tags = Tag.objects.all()  # 右侧所有文章标签
        hot = Article.objects.all().order_by('views')[:10]  # 通过浏览数进行排序
        page = request.GET.get('page')  # 在URL中获取当前页面数
        paginator = Paginator(article_list, 5)  # 对查询到的数据对象list进行分页,设置超过5条数据就分页
        try:
            list = paginator.page(page)  # 获取当前页码的记录
        except PageNotAnInteger:
            list = paginator.page(1)  # 如果用户输入的页码不是整数时,显示第1页的内容
        except EmptyPage:
            list = paginator.page(paginator.num_pages)  # 如果用户输入的页数不在系统的页码列表中时,显示最后一页的内容
    
        return render(request, 'archives.html', locals())
    

    添加HTML内容

    找到你要显示归档内容的模板,加入以下代码

        {% for date in dates %}
            <li style="list-style:none">
                <a href="{% url 'archives' date.year date.month %}">
                    {{ date.year }} 年 {{ date.month }} 月 归档
                </a>
            </li>
        {% empty %}
            暂无归档!
        {% endfor %}
    

    正常显示为:


    image.png

    根据需要调整其他页面,使其正常显示归档模板!

    相关文章

      网友评论

          本文标题:Django博客优化 文章归档

          本文链接:https://www.haomeiwen.com/subject/wwgfgktx.html