Django-实现分页

视图核心代码

# 获取所有文章
post = Post.objects.all()
# 获取p的值默认为1
p = request.GET.get('p', 1)
# 第一个参数为 必选参数,代表需要进行分页处理的数据,参数值可以为列表、元组或ORM查询的数据对象等。
# 第二个参数为 必选参数,设置每一页的数据量,参数值必须为整型
paginator = Paginator(post, 4)
try:# page():根据当前页数对参数object_list进行切片处理,获取页数所对应的数据信息,函数返回值调用_get_page()。pages = paginator.page(p)
except PageNotAnInteger:pages = paginator.page(1)
except EmptyPage:# num_pages():获取分页后的总页数。pages = paginator.page(paginator.num_pages)

前端核心代码

  <nav class="pagination" style=""><ul>//has_previous():判断当前页数是否存在上一页{% if pages.has_previous %}//previous_page_number():如果当前页数存在上一页,就输出上一页的页数,否则抛出EmptyPage异常。<li class="next-page"><a href="?p={{ pages.previous_page_number }}">上一页</a></li>{% endif %}<li class="prev-page"></li>//page_range():将分页后的总页数生成可循环对象。{% for page in pages.paginator.page_range  %}{% if pages.number == page %}<li class="active"><span>{{ page }}</span></li>{% elif pages.number|add:'-1' == page or pages.number|add:'1' == page %}<li><a href="?p={{ page }}">{{ page }}</a></li>{% endif %}{% endfor %}//has_next():判断当前页数是否存在下一页。{% if pages.has_next %}//next_page_number():如果当前页数存在下一页,就输出下一页的页数,否则抛出EmptyPage异常。<li class="next-page"><a href="?p={{ pages.next_page_number }}">下一页</a></li>{% endif %}</ul></nav>

Paginator类一共定义了4个初始化参数和8个类方法,每个初始化参数和类方法的说明如下:

  • object_list:必选参数,代表需要进行分页处理的数据,参数值可以为列表、元组或ORM查询的数据对象等。
  • per_page:必选参数,设置每一页的数据量,参数值必须为整型。
  • orphans:可选参数,如果最后一页的数据量小于或等于参数orphans的值,就将最后一页的数据合并到前一页的数据。比如有23行数据,若参数per_page=10、orphans=5,则数据分页后的总页数为2,第一页显示10行数据,第二页显示13行数据。
  • allow_empty_first_page:可选参数,是否允许第一页为空。如果参数值为False并且参数object_list为空列表,就会引发EmptyPage错误。
  • validate_number():验证当前页数是否大于或等于1。
  • get_page():调用validate_number()验证当前页数是否有效,函数返回值调用page()。
  • page():根据当前页数对参数object_list进行切片处理,获取页数所对应的数据信息,函数返回值调用_get_page()。_
  • get_page():调用Page类,并将当前页数和页数所对应的数据信息传递给Page类,创建当前页数的数据对象。
  • count():获取参数object_list的数据长度。
  • num_pages():获取分页后的总页数。
  • page_range():将分页后的总页数生成可循环对象。
  • _check_object_list_is_ordered():如果参数object_list是ORM查询的数据对象,并且该数据对象的数据是无序排列的,就提示警告信息。

从Paginator类定义的get_page()、page()和_get_page()得知,三者之间存在调用关系

Page类的定义过程,它一共定义了3个初始化参数和7个类方法,每个初始化参数和类方法的说明如下:

  • object_list:必选参数,代表已切片处理的数据对象。
  • number:必选参数,代表用户传递的页数。
  • paginator:必选参数,代表Paginator类的实例化对象。
  • has_next():判断当前页数是否存在下一页。
  • has_previous():判断当前页数是否存在上一页。
  • has_other_pages():判断当前页数是否存在上一页或者下一页。
  • next_page_number():如果当前页数存在下一页,就输出下一页的页数,否则抛出EmptyPage异常。
  • previous_page_number():如果当前页数存在上一页,就输出上一页的页数,否则抛出EmptyPage异常。
  • start_index():输出当前页数的第一行数据在整个数据列表的位置,数据位置从1开始计算。
  • end_index():输出当前页数的最后一行数据在整个数据列表的位置,数据位置从1开始计算。

Django-实现分页相关推荐

  1. Django快速分页

    分页 在web开发中,对大量的商品进行分页显示,是常见的需求,django对分页直接提供了现成的函数,让我们的开发更为快速便捷... 动图_Django快速分页 在后端(视图函数中) from dja ...

  2. Django—自定义分页

    分页功能在每个网站都是必要的,对于分页来说,其实就是根据用户的输入计算出应该显示在页面上的数据在数据库表中的起始位置. 确定分页需求: 1. 每页显示的数据条数 2. 每页显示页号链接数 3. 上一页 ...

  3. Django实现分页功能

    在本节中,我们将介绍 Django 为我们提供的高级模块,通过高级模块的学习,你会感受到 Django 的易用性如此之强,但是同时它又很复杂,所以在学习 Django 这样的重度框架的时候,我们一定要 ...

  4. 如何使用 Django 进行分页

    Django自带的分页插件 现象这样的一个问题  ,分页是不是有规律的,是个什么样的规律?, 假如我们对每页的数据固定显示20条  是什么样的呢? pageSize=20 每页多少条 page=7 页 ...

  5. Django 基础(12)-Django drf 分页查询(批量查询)、自定义分页器

    文章目录 Django drf 分页查询(批量查询) PageNumberPagination:普通分页 Django 自定义分页器 自定义批量查询的返回结构 LimitOffsetPaginatio ...

  6. django session, 分页,数据库学习

    一.http请求周期 浏览器(socket客户端):2.socket.connect(ip,端口)3.socket.send("规则: http协议GET请求:"GET /inde ...

  7. Django(part43)--分页

    学习笔记,仅供参考,有错必纠 分页 分页是指在web页面有大量数据需要显示时,当一页的内容太多不利于阅读和不利于数据提取的情况下,可以分为多页进行显示: Django提供了一些类管理分页的数据 , 即 ...

  8. django之分页、cookie装饰器

    一.分页代码如下 from django.utils.safestring importmark_safeclassPage:def __init__(self, current_page, data ...

  9. django的分页机制

    翻译自官方文档 分页机制¶ Django 1.0 中分页机制和先前已经大不相同.它提供了一些类协助你把数据分页. 对应的文件为 django/core/paginator.py 举例¶ 类Pagina ...

  10. Django mysql 分页显示_django之分页显示

    演示环境接上篇django. 说明: Django提供了一些类,来实现管理数据分页:Paginator对象.Page对象. 其中Paginator类对象介绍如下: Paginator(列表,int): ...

最新文章

  1. python开发环境spyder_spyder python 2.7-spyder(Python开发环境)下载 v2.1.10官方版--pc6下载站...
  2. 核心频率个加速频率_仅少数Ryzen 9 3900X能摸到官方最大加速频率,其他处理器也有这问题...
  3. 哈佛终身教授刘军:生活在一个统计学的时代
  4. (二分+区间搜索 )Mountain Walking(poj2110/poj2922)
  5. mysql计划任务书_求做一个基于java的mysql课程设计任务书 要求如下
  6. java post 注册_Java 以 post 发送方式实现百度链接提交主动推送
  7. springboot通过各种不同类型参数获取容器中的bean工具类
  8. js 实现php md5加密,js实现md5加密插件代码分享
  9. ruby,gem,rails之间的关系
  10. 好的项目需要有好的需求
  11. 使用yum更新补丁包
  12. django book学习笔记
  13. office2016 excel表格如何插入复选框
  14. linux wa%过高,iostat查看io状况
  15. 【Python】—— pipenv使用小结
  16. OBS Studio显示器黑屏
  17. 互联网+废品回收项目可行性分析报告
  18. 祭奠被消亡的CSDN文章
  19. latex如何绘制标准三线表 lllegal charactor in array arg 如何合并单元格?
  20. x86汇编_高级语言的IF语句_笔记_37

热门文章

  1. IT运维工作到底是做什么的?
  2. Cesium源码解读系列(一):GeoJsonDataSource如何处理geojson格式的数据
  3. Linux下批处理文件编写
  4. bitset用法讲解
  5. Baumer工业相机堡盟相机如何使用自动曝光功能(自动曝光优点和行业应用)(C++)
  6. ETM地形编辑DEMO运行时出错问题
  7. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】
  8. MOSFET与MOSFET驱动电路原理及应用(转)
  9. 学习AI人工智能,你必须要知道的4件事!
  10. Python 计算MD5值 图片查重去重