class Pagination(object):

def init(self, current_page, all_count, per_page_num=10, pager_count=11):

"""

封装分页相关数据

:param current_page: 当前页

:param all_count: 数据库中的数据总条数

:param per_page_num: 每页显示的数据条数

:param pager_count: 最多显示的页码个数

  1. 用法:
  2. queryset = model.objects.all()
  3. page_obj = Pagination(current_page,all_count)
  4. page_data = queryset[page_obj.start:page_obj.end]
  5. 获取数据用page_data而不再使用原始的queryset
  6. 获取前端分页样式用page_obj.page_html
  7. """
  8. try:
  9. current_page = int(current_page)
  10. except Exception as e:
  11. current_page = 1
  12. if current_page < 1:
  13. current_page = 1
  14. self.current_page = current_page
  15. self.all_count = all_count
  16. self.per_page_num = per_page_num
  17. # 总页码
  18. all_pager, tmp = divmod(all_count, per_page_num)
  19. if tmp:
  20. all_pager += 1
  21. self.all_pager = all_pager
  22. self.pager_count = pager_count
  23. self.pager_count_half = int((pager_count - 1) / 2)
  24. @property
  25. def start(self):
  26. return (self.current_page - 1) * self.per_page_num
  27. @property
  28. def end(self):
  29. return self.current_page * self.per_page_num
  30. def page_html(self):
  31. # 如果总页码 < 11个:
  32. if self.all_pager <= self.pager_count:
  33. pager_start = 1
  34. pager_end = self.all_pager + 1
  35. # 总页码 > 11
  36. else:
  37. # 当前页如果<=页面上最多显示11/2个页码
  38. if self.current_page <= self.pager_count_half:
  39. pager_start = 1
  40. pager_end = self.pager_count + 1
  41. # 当前页大于5
  42. else:
  43. # 页码翻到最后
  44. if (self.current_page + self.pager_count_half) > self.all_pager:
  45. pager_end = self.all_pager + 1
  46. pager_start = self.all_pager - self.pager_count + 1
  47. else:
  48. pager_start = self.current_page - self.pager_count_half
  49. pager_end = self.current_page + self.pager_count_half + 1
  50. page_html_list = []
  51. # 添加前面的nav和ul标签
  52. page_html_list.append('''
  53. <nav aria-label='Page navigation>'
  54. <ul class='pagination'>
  55. ''')
  56. first_page = '<li><a href="?page=%s">首页</a></li>' % (1)
  57. page_html_list.append(first_page)
  58. if self.current_page <= 1:
  59. prev_page = '<li class="disabled"><a href="#">上一页</a></li>'
  60. else:
  61. prev_page = '<li><a href="?page=%s">上一页</a></li>' % (self.current_page - 1,)
  62. page_html_list.append(prev_page)
  63. for i in range(pager_start, pager_end):
  64. if i == self.current_page:
  65. temp = '<li class="active"><a href="?page=%s">%s</a></li>' % (i, i,)
  66. else:
  67. temp = '<li><a href="?page=%s">%s</a></li>' % (i, i,)
  68. page_html_list.append(temp)
  69. if self.current_page >= self.all_pager:
  70. next_page = '<li class="disabled"><a href="#">下一页</a></li>'
  71. else:
  72. next_page = '<li><a href="?page=%s">下一页</a></li>' % (self.current_page + 1,)
  73. page_html_list.append(next_page)
  74. last_page = '<li><a href="?page=%s">尾页</a></li>' % (self.all_pager,)
  75. page_html_list.append(last_page)
  76. # 尾部添加标签
  77. page_html_list.append('''
  78. </nav>
  79. </ul>
  80. ''')
  81. return ''.join(page_html_list)

class Pagination(object)分页源码的更多相关文章

  1. cPage分页源码,分享给大家,可作参考

    cPage是asp.net分页控件,也可以叫做分页组件,更确切的应该叫做分页模块,也或者叫做分页通用代码. cPage,版本3.2,源码如下: using System; namespace cPag ...

  2. JDK8下Object类源码理解

    JDK8中Object类提供的方法: package java.lang; /** * Class {@code Object} is the root of the class hierarchy. ...

  3. KGX滚动分页源码

    源码描述: 本工具采用Jquery框架,通过jquery调用ashx获取并输出数据,示例中采用测试数据,可以自行扩展为图片等等 当下流行的分页方式,鼠标滚动下拉条会自动展示下一页信息,类似瀑布流的效果 ...

  4. js 带省略号的分页源码及应用实例

    一.js:pagination.js /*--说明分页div id为:changpage*/var eachPageDataNum = 10;//每页显示记录数var nowPage = 1;//当前 ...

  5. 8. mybatis实战教程(mybatis in action)之七:实现mybatis分页(源码下载)

    转自:https://blog.csdn.net/tangruyi1992/article/details/52584012 上 一篇文章里已经讲到了mybatis与spring MVC的集成,并且做 ...

  6. spring-boot-2.0.3源码篇 - pageHelper分页,绝对有值得你看的地方

    前言 开心一刻 说实话,作为一个宅男,每次被淘宝上的雄性店主追着喊亲,亲,亲,这感觉真是恶心透顶,好像被强吻一样.........更烦的是我每次为了省钱,还得用个女号,跟那些店主说:“哥哥包邮嘛么叽. ...

  7. JDK1.8源码(一)——java.lang.Object类

    本系列博客将对JDK1.8版本的相关类从源码层次进行介绍,JDK8的下载地址. 首先介绍JDK中所有类的基类——java.lang.Object. Object 类属于 java.lang 包,此包下 ...

  8. Java源码之Object

    本文出自:http://blog.csdn.net/dt235201314/article/details/78318399 一丶概述 JAVA中所有的类都继承自Object类,就从Object作为源 ...

  9. JDK1.8源码阅读笔记(1)Object类

    JDK1.8源码阅读笔记(1)Object类 ​ Object 类属于 java.lang 包,此包下的所有类在使⽤时⽆需⼿动导⼊,系统会在程序编译期间⾃动 导⼊.Object 类是所有类的基类,当⼀ ...

随机推荐

  1. Kubernetes 原理架构介绍(一)

    目录 一.Kubernetes 是什么 二.Kubernetes 设计架构 三.Kubernetes的核心技术概念和API对象 Cluster Master Node Pod Controller D ...

  2. Node 脚本的调试工具

    2016年,Node 决定将 Chrome 浏览器的"开发者工具"作为官方的调试工具,使得 Node 脚本也可以使用图形界面调试 1.准备 创建目录 D:\nodejs>mk ...

  3. 【LOJ511】[LibreOJ NOI Round #1]验题(动态DP)

    我这道题写了整!整!三!天! 我要一定要写这篇博客来表达我复!杂!的!心!情! 题目 LOJ511 官方题解(这个题解似乎不是很详细,我膜 std 才看懂的) 调这道题验证了我校某人的一句话:调题是一 ...

  4. fineui grid自定义选项框 带全选

    为什么要写这功能? 1 当你用可编辑列的时候,是不能用选择框的,这是ext设定的. 2 如果有不允许选择行,默认的选择框是没有这个功能的.   参考: 遍历asp.net控件 http://fineu ...

  5. IntelliJ IDEA 删除自定义的 Maven 框架依赖

    IntelliJ IDEA 删除自定义的 Maven 框架依赖 IntelliJ Idea中添加Maven Archetype,但是IntelliJ Idea中并没有提供删除的方法. windows中 ...

  6. C++冒泡排序及优化

    冒泡排序 1.经典冒泡排序 经典的冒泡排序为从左边开始依次判断排序,每次最终仅将一个数向后冒泡,而对于其他数的排序没有什么帮助:如果已经所有元素已经是有序的,依然执行循环. 2.优化冒泡排序 优化地方 ...

  7. 安装rabbitMQ的PHP扩展

    1.环境准备:centos 7.6+PHP7.3 2.安装rabbitmq-ctar xf rabbitmq-c-0.9.0.tar.gzcd rabbitmq-c-0.9.0mkdir build ...

  8. 【Python爬虫案例学习】分析Ajax请求并抓取今日头条街拍图片

    1.抓取索引页内容 利用requests请求目标站点,得到索引网页HTML代码,返回结果. from urllib.parse import urlencode from requests.excep ...

  9. 介绍一款好用的命令行工具Cmder

    一.Cmder的介绍: 在大多数情况下,我们都想复制命令行窗口中的命令行,但是cmd复制粘贴大家都懂得:有没有更好的工具替代呢? 答案是肯定的,今天我将为大家介绍一款工具--Cmder. Cmder可 ...

  10. ELK学习笔记之使用curl命令操作elasticsearch

    0x00 _cat系列 _cat系列提供了一系列查询elasticsearch集群状态的接口.你可以通过执行curl -XGET localhost:9200/_cat 1. 获取所有_cat系列的操 ...