Django博客优化 文章归档

前言

为博客添加文章归档功能

添加URL

urlpatterns = [
....
    path('archives//', 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 %}
        
  • {{ date.year }} 年 {{ date.month }} 月 归档
  • {% empty %} 暂无归档! {% endfor %}

    正常显示为:


    image.png

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

    你可能感兴趣的:(Django博客优化 文章归档)