Django学习教程(十七)Django分页功能实现
Django学习教程(十七)Django分页功能实现
- 前言
- 1.导入分页类
- 2.修改文章列表视图
- 3.修改列表模板
- 4.添加分页按钮
- 5.访问测试
- 6.常用分页属性
- 7.总结
前言
上一篇我们实现了文章详情页中的上一篇和下一篇跳转。这一篇我们继续完善博客列表页,实现分页功能。
如果博客文章比较多,全部显示在一个页面中就不太合适,所以需要分页展示。
1.导入分页类
Django中提供了Paginator类,可以用来实现分页。
代码:
from django.core.paginator import Paginator2.修改文章列表视图
打开views.py文件,修改article_list方法。
代码:
from django.shortcuts import render from django.core.paginator import Paginator from .models import Article def article_list(request): articles = Article.objects.all().order_by('-created_time') paginator = Paginator(articles, 5) page_number = request.GET.get('page') page_obj = paginator.get_page(page_number) return render(request, 'blog/article_list.html', {'page_obj': page_obj})这里的Paginator(articles, 5)表示每页显示5条数据。
request.GET.get('page')表示获取地址栏中的page参数。
3.修改列表模板
article_list.html中遍历page_obj。
代码:
{% for article in page_obj %} <div class="card mb-3"> <div class="card-body"> <h5 class="card-title">{{ article.title }}</h5> <p class="card-text">{{ article.content }}</p> <a href="/article/{{ article.id }}/" class="btn btn-primary">查看详情</a> </div> </div> {% endfor %}4.添加分页按钮
在文章列表下面添加分页。
代码:
<nav> <ul class="pagination"> {% if page_obj.has_previous %} <li class="page-item"> <a class="page-link" href="?page={{ page_obj.previous_page_number }}">上一页</a> </li> {% endif %} <li class="page-item active"> <span class="page-link"> {{ page_obj.number }} </span> </li> {% if page_obj.has_next %} <li class="page-item"> <a class="page-link" href="?page={{ page_obj.next_page_number }}">下一页</a> </li> {% endif %} </ul> </nav>5.访问测试
访问首页:
http://127.0.0.1:8000/访问第二页:
http://127.0.0.1:8000/?page=2如果文章数量超过每页显示数量,就可以看到分页效果。
6.常用分页属性
常用分页属性有:
- page_obj.has_previous 是否有上一页
- page_obj.previous_page_number 上一页页码
- page_obj.has_next 是否有下一页
- page_obj.next_page_number 下一页页码
- page_obj.number 当前页码
7.总结
这一篇我们学习了Django中的分页功能,主要使用了Paginator类。
分页功能在博客、电商、后台管理系统中都非常常见,大家可以多敲几遍代码,加深理解。好了这一篇就到这里,下一篇我们继续学习实现最近文章列表,如果对你有帮助,点赞加关注,下篇见。
