前言
本章主要讲述 【学无止境】 界面功能的实现以及 【首页】 展示数据的简单优化
- ps:【学无止境】界面其实就是 文章列表,只是这里我加了个分页查询,可以查询到所有的数据
之前的【首页】,我默认是返回了查询所有的数据,正常情况下首页简单展示几条就行了,所以我这里简单优化了下
主要知识点:
- 文章列表分页实现
环境:
- Pycharm
- python3.6
- mysql 5.7
- django 2.0.13
一、新功能项目概览
二、首页数据展示优化
这里只是简单优化一下,因为正常情况下我们首页不需要显示所有数据,之前我们是返回了所有,逻辑改为:
- 【顶部博客】取值:按click_num降序排列取前3条数据
- 【时间轴】取值:按发布时间降序排列取前4条数据
1、user/views.py
- 这里前端不需要变更,简单改下后端数据返回逻辑即可
def index(request):
"""
返回首页
:param request:
:return:
"""
# 首页推荐文章:按照点赞数降序排列,默认拿前3条
figure_articles = Article.objects.all().order_by('-click_num')[:3]
# 时间轴文章:首页按时间降序排列,默认显示前4条
darticles = Article.objects.all().order_by('-date')[:4]
return render(request, "index.html", context={
'figure_articles': figure_articles, 'darticles': darticles})
三、学无止境功能具体实现
- 学无止境其实就是文章列表,与文章相关的功能都统一写在article应用下
1、urls.py
# 学无止境列表
path('show', article_show, name='show'),
2、views.py
- 后端这里进行了分页用到了Paginator,关于Paginator的常用方法和属性我写在注释了,大家到时候看下注释就行,我就不单独拧出来说了
def article_show(request):
"""
学无止境列表:进行分页查询
:param request:
:return:
"""
tags = Tag.objects.all()[:6] # 拿到前6个标签
tid = request.GET.get('tid') # 拿到请求的标签id
if tid:
# 如果参数传了标签id,拿到当前标签,然后通过当前标签拿到对应标签的所有的文章
tag = Tag.objects.get(pk=tid)
print("tag:", tag)
articles = tag.article_set.all()
print("通过标签查询到的所有文章:", artic