自定义分页的类:

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # Created by Mona on 2017/9/20
  4.  
  5. from django.utils.safestring import mark_safe
  6.  
  7. class Paginator:
  8. '''
  9. 页码的格式依赖于bootstrap;
  10. 使用案例:
  11.  
  12. from django.shortcuts import render,redirect,HttpResponse
  13. from app01.models import *
  14. from tools import page 导入
  15.  
  16. def index(request):
  17. base_url = request.path_info
  18. total_item_count = UserInfo.objects.all().count()
  19. current_page = int(request.GET.get('page',1))
  20.  
  21. page_obj = page.Paginator(total_item_count,current_page,base_url)
  22.  
  23. user_list = UserInfo.objects.all()[page_obj.start:page_obj.end]
  24.  
  25. return render(request,'index.html',{'user_list':user_list,'html_page': page_obj.pager})
  26.  
  27. '''
  28. def __init__(self,total_item_count,current_page,base_url,
              per_page_item_count=10,show_pager_count=11):
  29. '''
  30. :param total_item_count: 总记录数
  31. :param current_page: 当前页码
  32. :param base_url: 页码的前缀URL
  33. :param per_page_item_count: 每页显示的记录数
  34. :param show_pager_count: 显示的页码个数
  35. '''
  36.  
  37. self.total_item_count = total_item_count
  38. self.current_page = current_page
  39. self.base_url = base_url
  40. self.per_page_item_count = per_page_item_count
  41. self.show_pager_count = show_pager_count
  42.  
  43. total_page, res = divmod(self.total_item_count, self.per_page_item_count)
  44. if res:
  45. total_page += 1
  46.  
  47. self.total_page = total_page
  48. self.half_show_pager_count = int(total_page/2)
  49.  
  50. @property
  51. def start(self):
  52. '''
  53. 页码查询数据的开始位置
  54. :return:
  55. '''
  56. return (self.current_page-1)*self.per_page_item_count
  57.  
  58. @property
  59. def end(self):
  60. '''
  61. 页码查询数据的结束位置
  62. :return:
  63. '''
  64. return self.current_page*self.per_page_item_count
  65.  
  66. @property
  67. def pager(self):
  68. '''
  69. 返回需要的前端页码
  70. :return:
  71. '''
  72. page_list = []
  73. ul = ' <ul class="pagination">'
  74. page_list.append(ul)
  75.  
  76. if self.current_page == 1:
  77. prev = ' <li><a href="#">上一页</a></li>'
  78. else:
  79. prev = ' <li><a href="%s?page=%s">上一页</a></li>' % (self.base_url, self.current_page - 1)
  80.  
  81. page_list.append(prev)
  82.  
  83. # 如果数据特别少:
  84. if self.total_page < self.show_pager_count:
  85. pager_start = 1
  86. pager_end = self.total_page + 1
  87.  
  88. else:
  89. if self.current_page <= self.half_show_pager_count:
  90. pager_start = 1
  91. pager_end = self.show_pager_count + 1
  92.  
  93. else:
  94. if self.current_page + self.half_show_pager_count > self.total_page:
  95. pager_start = self.total_page - self.show_pager_count + 1
  96. pager_end = self.total_page + 1
  97. else:
  98. pager_start = self.current_page - self.half_show_pager_count
  99. pager_end = self.current_page + self.half_show_pager_count + 1
  100.  
  101. for i in range(pager_start, pager_end):
  102. if i == self.current_page:
  103. tpl = ' <li class="active"><a href="%s?page=%s">%s</a></li>' % (self.base_url, i, i,)
  104. else:
  105. tpl = ' <li><a href="%s?page=%s">%s</a></li>' % (self.base_url, i, i,)
  106. page_list.append(tpl)
  107.  
  108. if self.current_page == self.total_page:
  109. nex = ' <li><a href="#">下一页</a></li>'
  110. else:
  111. nex = ' <li><a href="%s?page=%s">下一页</a></li>' % (self.base_url, self.current_page + 1,)
  112.  
  113. page_list.append(nex)
  114.  
  115. lu = ' </ul>'
  116. page_list.append(lu)
  117.  
  118. html_page = mark_safe(''.join(page_list))
  119. return html_page

效果展示:

python__Django 分页的更多相关文章

  1. 记一次SQLServer的分页优化兼谈谈使用Row_Number()分页存在的问题

    最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且在翻第二页的时候也是要这么多的时间,这肯定是不能接受的,也是让现场用SQLServerP ...

  2. js实现前端分页页码管理

    用JS实现前端分页页码管理,可以很美观的区分页码显示(这也是参考大多数网站的分页页码展示),能够有很好的用户体验,这也是有业务需要就写了一下,还是新手,经验不足,欢迎指出批评! 首先先看效果图: 这是 ...

  3. JdbcTemplate+PageImpl实现多表分页查询

    一.基础实体 @MappedSuperclass public abstract class AbsIdEntity implements Serializable { private static ...

  4. MVC如何使用开源分页插件shenniu.pager.js

    最近比较忙,前期忙公司手机端接口项目,各种开发+调试+发布现在几乎上线无问题了:虽然公司项目忙不过在期间抽空做了两件个人觉得有意义的事情,一者使用aspnetcore开发了个人线上项目(要说线上其实只 ...

  5. NET Core-TagHelper实现分页标签

    这里将要和大家分享的是学习总结使用TagHelper实现分页标签,之前分享过一篇使用HtmlHelper扩展了一个分页写法地址可以点击这里http://www.cnblogs.com/wangrudo ...

  6. 套用JQuery EasyUI列表显示数据、分页、查询

    声明,本博客从csdn搬到cnblogs博客园了,以前的csdn不再更新,朋友们可以到这儿来找我的文章,更多的文章会发表,谢谢关注! 有时候闲的无聊,看到extjs那么肥大,真想把自己的项目改了,最近 ...

  7. php实现的分页类

    php分页类文件: <?php /** file: page.class.php 完美分页类 Page */ class Page { private $total; //数据表中总记录数 pr ...

  8. C#关于分页显示

    ---<PS:本人菜鸟,大手子还请高台贵手> 以下是我今天在做分页时所遇到的一个分页显示问题,使用拼写SQL的方式写的,同类型可参考哦~ ------------------------- ...

  9. JAVA 分页工具类及其使用

    Pager.java package pers.kangxu.datautils.common; import java.io.Serializable; import java.util.List; ...

随机推荐

  1. Sublime 正则 替换方法

  2. [转]unity3d所要知道的基础知识体系大纲,可以对照着学习,不定期更新 ... ... ... ...

    本文献给,想踏入3d游戏客户端开发的初学者. 毕业2年,去年开始9月开始转作手机游戏开发,从那时开始到现在一共面的游戏公司12家,其中知名的包括搜狐畅游.掌趣科技.蓝港在线.玩蟹科技.天神互动.乐元素 ...

  3. Week 3: Assessing performance 笔记

    得到一个模型之后如何评价其性能? training error & generalization error & test error 如何理解generalization error ...

  4. poj 2594(可相交的最小路径覆盖)

    题目链接:http://poj.org/problem?id=2594 思路:本来求最小路径覆盖是不能相交的,那么对于那些本来就可达的点怎么处理,我们可以求一次传递闭包,相当于是加边,这样我们就可以来 ...

  5. iOS 集成阿里百川最新版(3.1.1.96) 实现淘宝授权登录以及调用淘宝客户端商品详情页

      公司最近要做第三方登录,由于是做导购项目,必不可少的有淘宝的授权登录.本来就是一个授权登录,没什么大不了的.但淘宝的无线开放业务——阿里百川更新的最新版本3.1.1.96,开发文档不是不详细,是很 ...

  6. GOCR v0.50 原理分析

    一,简介: GOCR是一个c写的开源OCR库,GNU Public License,作者:Joerg Schulenburg 项目主页:http://jocr.sourceforge.net/inde ...

  7. day22模块和包

       一.模块 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的代码(. ...

  8. IOS 多线程的一些总结

    IOS 多线程 有三种主要方法 (1)NSThread (2)NSOperation (3)**   下面简单介绍这三个方法 1.NSThread 调用方法如下:         如函数需要输入参数, ...

  9. 47、ListView setSelection() 和 setSelectionFromTop()

    http://blog.csdn.net/manoel/article/details/39183025 http://blog.csdn.net/a859522265/article/details ...

  10. Python2.6升级Python2.7

    Python2.6升级2.7 由于Centos6系列自带的python版本为2.6.6,然而有很多应用需要依赖于python2.7来实现,所以有了这个升级的需求.升级原理很简单,无非就是下载.编译.安 ...