前言
为博客添加文章归档功能
添加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 %}
正常显示为: