1、在 view 中使用 Paginator

def query(request,sql):
# 创建连接
connection = pymysql.connect(**config)
try:
with connection.cursor() as cursor:
# 执行sql语句,插入记录
cursor.execute(sql);
boxdic =cursor.fetchall()
# 没有设置默认自动提交,需要主动提交,以保存所执行的语句
connection.commit()
finally:
connection.close();
objects = list(boxdic)
#默认每页40条,前端可以修改每页条数
pageSize = 40
if(request.GET.get('pageSize')):
if(request.GET.get('pageSize').isdigit()):
pageSize = request.GET.get('pageSize')
paginator = Paginator(objects, pageSize) #取页码数
page = request.GET.get('page')
try:
pagedata = paginator.page(page) # contacts为Page对象!
except PageNotAnInteger:
# If page is not an integer, deliver first page.
pagedata = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
pagedata = paginator.page(paginator.num_pages)
return render(request, 'list.html', {'pagedata': pagedata,
'title': title,
'static_path_pre': STATIC_PATH_PRE
}) 2、在模板(list.html)中的相关操作
<div class="con" >
<ul class="pager">
共 {{ pagedata.paginator.count}} 条
<form class="changePage">每页: <input type="text" class="pageSize" name="pageSize" onkeyup="submitForm(e)" value="{{ pagedata.paginator.per_page}}"/>
<input type="submit" value="提交" id="SubmitPageBtn" style="display: none;"/></form>
<li><a href="?page=1&pageSize={{ pagedata.paginator.per_page}}">首页</a></li>
<form method="post" action="{{ request.path }}" class="ShowOutput"> {% csrf_token %} <input type="submit" class="btn btn-success" value="导出" /></form> {% if pagedata.has_previous %}
<li><a href="?page=1&pageSize={{ pagedata.paginator.per_page}}&pageSize={{ pagedata.paginator.per_page}}">首页</a></li>
<li><a href="?page={{ pagedata.previous_page_number }}&pageSize={{ pagedata.paginator.per_page}}"> 上一页 </a></li>
{% endif %}
<li class="active"><a href="#">{{ pagedata.number }}/{{ pagedata.paginator.num_pages}} </a></li>
{% if pagedata.has_next %}
<li> <a href="?page={{ pagedata.next_page_number }}&pageSize={{ pagedata.paginator.per_page}}">下一页 </a></li>
<li><a href="?page={{ pagedata.paginator.num_pages }}&pageSize={{ pagedata.paginator.per_page}}"> 末页 </a></li>
{% endif %} </ul>
</div> 补充:Paginator的方法属性(转)翻译自官方文档

Paginator构造函数:
  1. Paginator(object_list, per_page, orphans=0, allow_empty_first_page=True)

A、必传参数

object_list

一个list,tuple,django的QuerySet,或者拥有``count()``或``__len__()``方法的 可分解对象。

per_page

每一页最大的对象个数。

B、可选参数

orphans

最后一页对象的最少数目,默认为0。 如果想避免最后一页显示太少。则可以使用这个值。 那么最后一页的数据,自动被前移一页。比如总共23个数据。每页显示 10. orphans=3 那么,第一页为10,第二页为13.

allow_empty_first_page

表示首页是否可以为空,如果是 False 而且``object_list`` 为空,那么会触发 EmptyPage 异常。

方法

  1. Paginator.page(number)

根据索引number,返回一个’Page’对象,如果不存在,引起 InvalidPage异常

C、Paginator属性

  1. Paginator.count

所有对象的总数, 尝试通过``object_list.count()``和``object_list.__len__()`` 取得

  1. Paginator.num_pages

总共的页数

  1. Paginator.page_range

页的范围,比如 [1, 2, 3, 4] 。

  1. Paginator.per_page

每页的数据个数


InvalidPage 异常

当页面不存在或者无效时,会引起``InvalidPage``异常,一般这个异常就够用,如果需要更 详细信息,还有``PageNotAnInteger``,``EmptyPage``可用:

PageNotAnInteger 异常

page() 的参数非整数。

EmptyPage

page(x) ,第x页没数据。

上述两个都是 InvalidPage 的子类。 用一个简单的 except InvalidPage 就可以处理。

Page 类

Page(object_list, number, paginator):

一般不需用户自己构造,通过`Paginator.page` 生成。Paginator.page(number) 返回number的Page对象

A、方法

  1. Page.has_next()

如果下一页存在,返回True。

  1. Page.has_previous()

如果前一页存在返回 True

  1. Page.has_other_pages()

如果上一页面或者下一页存在,返回``True``

  1. Page.next_page_number()

返回下一页的索引,这个函数比较傻(不管下一页是否存在,都是简单的+1)

  1. Page.previous_page_number()

返回上一页的索引,其他同上

  1. Page.start_index()

返回当前页,第一个对象的索引。

  1. Page.end_index()

道理同上。

B、属性

Page.object_list

当前页对象列表

Page.number

当前页的索引

具体举例

  1. >>> from django.core.paginator import Paginator
  2. >>> objects = ['john', 'paul', 'george', 'ringo']
  3. >>> p = Paginator(objects, 2)
  1. >>> p.count
  2. 4
  3. >>> p.num_pages
  4. 2
  5. >>> p.page_range
  6. [1, 2]
  7. >>>p.per_page
  8. 2
  1. >>> page1 = p.page(1)
  2. >>> page1
  3. <Page 1 of 2>
  4. >>> page1.object_list
  5. ['john', 'paul']
  1. >>> page2 = p.page(2)
  2. >>> page2.object_list
  3. ['george', 'ringo']
  4. >>> page2.has_next()
  5. False
  6. >>> page2.has_previous()
  7. True
  8. >>> page2.has_other_pages()
  9. True
  10. >>> page2.next_page_number()
  11. 3
  12. >>> page2.previous_page_number()
  13. 1
  14. >>> page2.start_index() # The 1-based index of the first item on this page
  15. 3
  16. >>> page2.end_index() # The 1-based index of the last item on this page
  17. 4
  1. >>> p.page(0)
  2. ...
  3. EmptyPage: That page number is less than 1
  4. >>> p.page(3)
  5. ...
  6. EmptyPage: That page contains no results
  7. Note

在视图中使用 Paginator¶,如上list.html 

Django 在 view 中使用 Paginator分页插件的更多相关文章

  1. Bootstrap Paginator分页插件

    Bootstrap Paginator分页插件使用示例 最近做的asp.netMVC项目中需要对数据列表进行分类,这个本来就是基于bootstrap开发的后台,因此也就想着bootstrap是否有分页 ...

  2. Bootstrap Paginator分页插件+ajax

    Bootstrap Paginator分页插件下载地址: DownloadVisit Project in GitHub  Bootstrap分页插件属性介绍: http://www.cnblogs. ...

  3. Bootstrap Paginator分页插件+ajax 实现动态无刷新分页

    之前做分页想过做淘宝的那个,但是因为是后台要求不高,就Bootstrap Paginator插件感觉还蛮容易上手,所以就选了它. Bootstrap Paginator分页插件下载地址: Downlo ...

  4. jq.paginator分页插件稍加修改

    样式一: 样式二: 此分页功能在jq.paginator分页插件上稍加修改. 必加模板html: <div id="jqPaginator"> <div id=& ...

  5. Bootstrap Paginator分页插件(mark)

    Bootstrap Paginator分页插件

  6. 如何在实际项目中使用PageHelper分页插件

    PageHelper是一个分页插件,能够简单快速的帮助开发人员完成常见的分页功能,你只需要简单的使用两行代码就可以完成一个分页效果- 最近做一个科创项目,使用Maven+SSM的环境,有分页的功能,于 ...

  7. Bootstrap Paginator 分页插件参数介绍及使用

    Bootstrap Paginator是一款基于Bootstrap的js分页插件,功能很丰富,个人觉得这款插件已经无可挑剔了.它提供了一系列的参数用来支持用户的定制,提供了公共的方法可随时获得插件状态 ...

  8. Bootstrap Paginator分页插件使用示例

    最近做的asp.netMVC项目中需要对数据列表进行分类,这个本来就是基于bootstrap开发的后台,因此也就想着bootstrap是否有分页插件呢,或者说是基于jquery支持的分页功能,这样整体 ...

  9. Bootstrap Paginator分页插件的使用

    今天,我为大家带来的一款做得非常优秀的分页插件BootStrap Paginator,他是一款js插件,由于本人也是才刚刚搞出来的,所以暂时对它也不是特别了解,只能大楖告诉大家怎么使用.我这里使用的是 ...

随机推荐

  1. mongo db 使用方法[转]

    1 下载 mogodb http://www.mongodb.org/display/DOCS/Downloads 2 打开服务 我安装在e盘下了 可以指定数据文件位置 到 E:\mongoDB\mo ...

  2. 【bzoj3052】[wc2013]糖果公园 带修改树上莫队

    题目描述 给出一棵n个点的树,每个点有一个点权,点权范围为1~m.支持两种操作:(1)修改一个点的点权 (2)对于一条路径,求$\sum\limits_{i=1}^m\sum\limits_{j=1} ...

  3. BZOJ4321 queue2(动态规划)

    考虑套路地将1~n依次加入排列.设f[i][j]为已将1~i加入排列,有j对不合法的方案数.加入i+1时可能减少一对不合法的,可能不变,可能增加一对,对于i+1与i的关系再增设0/1/2状态表示i与左 ...

  4. 第一个贴上XMT标签的Hadoop程序

    距离老板留给我并行化做属性约简的任务开始到今天,已是一周有余,期间经历过各种呕心沥血,通宵达旦,终于运行出了一个结果.其中在配置过程中,浪费了爷大量的时间,有时回想自己上个周干的事情,会觉得分明的本末 ...

  5. Codeforces Round #553 F Sonya and Informatics

    题目 题目大意 给定一个长为 $n$($2 \le n \le 100$)的01串 $S$ .对 $S$ 进行 $k$($1 \le k \le 10^9$)次操作:等概率地选取两个下标 $i, j$ ...

  6. 手把手教你通过Eclipse工程配置调用JNI完全攻略

    本文地址:http://www.cnblogs.com/wavky/p/JNI.html 当你找到并鬼使神差地打开这个博文的时候,我敢肯定你已经知道什么是JNI,基本概念就不粘贴了. 百度出来的JNI ...

  7. 十个迅速提升JQuery性能的技巧

    本文提供即刻提升你的脚本性能的十个步骤.不用担心,这并不是什么高深的技巧.人人皆可运用!这些技巧包括: 使用最新版本 合并.最小化脚本 用for替代each 用ID替代class选择器 给选择器指定前 ...

  8. LowercaseRoutesMVC ASP.NET MVC routes to lowercase URLs

    About this Project Tired of your MVC application generating mixed-case URLs like http://mysite.com/H ...

  9. 于是他错误的点名开始了 [Trie]

    于是他错误的点名开始了 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉(详情请见已 ...

  10. bzoj 4836 [Lydsy1704月赛]二元运算 分治FFT+生成函数

    [Lydsy1704月赛]二元运算 Time Limit: 8 Sec  Memory Limit: 128 MBSubmit: 577  Solved: 201[Submit][Status][Di ...