当前位置: 首页 > news >正文

Django学习教程(十七)Django分页功能实现

Django学习教程(十七)Django分页功能实现

  • 前言
  • 1.导入分页类
  • 2.修改文章列表视图
  • 3.修改列表模板
  • 4.添加分页按钮
  • 5.访问测试
  • 6.常用分页属性
  • 7.总结

前言

上一篇我们实现了文章详情页中的上一篇和下一篇跳转。这一篇我们继续完善博客列表页,实现分页功能。

如果博客文章比较多,全部显示在一个页面中就不太合适,所以需要分页展示。

1.导入分页类

Django中提供了Paginator类,可以用来实现分页。

代码:

from django.core.paginator import Paginator

2.修改文章列表视图

打开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.常用分页属性

常用分页属性有:

  1. page_obj.has_previous 是否有上一页
  2. page_obj.previous_page_number 上一页页码
  3. page_obj.has_next 是否有下一页
  4. page_obj.next_page_number 下一页页码
  5. page_obj.number 当前页码

7.总结

这一篇我们学习了Django中的分页功能,主要使用了Paginator类。

分页功能在博客、电商、后台管理系统中都非常常见,大家可以多敲几遍代码,加深理解。好了这一篇就到这里,下一篇我们继续学习实现最近文章列表,如果对你有帮助,点赞加关注,下篇见。

http://www.gsyq.cn/news/1591451.html

相关文章:

  • HTTP 403绕过实战:从权限校验到未授权访问的攻防解析
  • 开源BuildingAI企业级实战:智能体+知识库+RAG一站式办公平台
  • 旋进旋涡流量计可以测量哪些介质呢?
  • 算法设计中的鸽巢原理、归约与组合设计应用
  • 星纵物联WS50x智能开关面板,开关升级一步到位
  • 雷电模拟器部署Frida全攻略:从环境配置到Hook实战
  • 我用QClaw的命理大师体验玄学,AI结果令我震惊了
  • 孩子挑食、面色黄、总生病?可能缺的不是饭,是“营养素”
  • 阿里云PolarDB MySQL版完全使用指南:从集群创建到SQL语法实战
  • MySQL 事务 ACID 四大特性 + 四大隔离级别(面试高频考点)
  • Ice终极指南:解锁macOS菜单栏管理新境界
  • 由于找不到WnSkinPreview.dll,无法继续执行代码
  • 结对编程指南:方法、优势、挑战与实践建议
  • 如何用OCR做无货源电商自动化系统(完整变现链路)
  • PHP开发者的福音!这套开源商城源码,堪称二开界的“瑞士军刀”!
  • 自对偶杨-米尔斯理论单圈修正与非线性李共形代数量子命运探析
  • 夏季达沃斯把物理 AI 推上 C 位:AI 正在从虚拟世界走向物理世界
  • 【计算机毕业设计】基于SSM框架的宠物智能托管系统的设计与实现
  • SEO优化与AI品牌信息建设的工程对比
  • RDK X5 部署 FCOS 目标检测模型实战:Anchor-Free 单阶段检测器
  • 高并发压力测试,vLLM 在 AMD Instinct GPU 上的极限吞吐量揭秘
  • 高并发私域怎么玩?分享一个基于E云管家底层底座的【微信私域自动化】分流脚本
  • 2026年6月亲测,选审计机构看这份报告
  • 基于碰撞避免矢量场的移动椭圆障碍物局部运动规划算法matlab复现
  • 51单片机模拟快递货柜GSM短信系统112-2(设计源文件+万字报告+讲解)(支持资料、图片参考_降重降ai)
  • [MongoDB小技巧19]MongoDB Oplog 深度解析:原理、配置与最佳实践
  • 2026年精选一键生成论文工具指南(安全合规版)
  • 技启新程 筑梦智造|华清远见成都中心6月开班典礼
  • 你们做一个项目,到底是怎么走的?
  • 【计算机毕业设计案例】基于 SpringBoot+Vue 的财务报表生成管理系统设计与实现 中小企业财会业务信息化管理系统设计与实现(程序+文档+讲解+定制)