Django 在 view 中使用 Paginator分页插件
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构造函数:
- 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 异常。
方法
- Paginator.page(number)
根据索引number,返回一个’Page’对象,如果不存在,引起 InvalidPage异常
C、Paginator属性
- Paginator.count
所有对象的总数, 尝试通过``object_list.count()``和``object_list.__len__()`` 取得
- Paginator.num_pages
总共的页数
- Paginator.page_range
页的范围,比如 [1, 2, 3, 4] 。
- 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、方法
- Page.has_next()
如果下一页存在,返回True。
- Page.has_previous()
如果前一页存在返回 True
- Page.has_other_pages()
如果上一页面或者下一页存在,返回``True``
- Page.next_page_number()
返回下一页的索引,这个函数比较傻(不管下一页是否存在,都是简单的+1)
- Page.previous_page_number()
返回上一页的索引,其他同上
- Page.start_index()
返回当前页,第一个对象的索引。
- Page.end_index()
道理同上。
B、属性
Page.object_list
当前页对象列表
Page.number
当前页的索引
具体举例¶
- >>> from django.core.paginator import Paginator
- >>> objects = ['john', 'paul', 'george', 'ringo']
- >>> p = Paginator(objects, 2)
- >>> p.count
- 4
- >>> p.num_pages
- 2
- >>> p.page_range
- [1, 2]
- >>>p.per_page
- 2
- >>> page1 = p.page(1)
- >>> page1
- <Page 1 of 2>
- >>> page1.object_list
- ['john', 'paul']
- >>> page2 = p.page(2)
- >>> page2.object_list
- ['george', 'ringo']
- >>> page2.has_next()
- False
- >>> page2.has_previous()
- True
- >>> page2.has_other_pages()
- True
- >>> page2.next_page_number()
- 3
- >>> page2.previous_page_number()
- 1
- >>> page2.start_index() # The 1-based index of the first item on this page
- 3
- >>> page2.end_index() # The 1-based index of the last item on this page
- 4
- >>> p.page(0)
- ...
- EmptyPage: That page number is less than 1
- >>> p.page(3)
- ...
- EmptyPage: That page contains no results
- Note
在视图中使用 Paginator¶,如上list.html
Django 在 view 中使用 Paginator分页插件的更多相关文章
- Bootstrap Paginator分页插件
Bootstrap Paginator分页插件使用示例 最近做的asp.netMVC项目中需要对数据列表进行分类,这个本来就是基于bootstrap开发的后台,因此也就想着bootstrap是否有分页 ...
- Bootstrap Paginator分页插件+ajax
Bootstrap Paginator分页插件下载地址: DownloadVisit Project in GitHub Bootstrap分页插件属性介绍: http://www.cnblogs. ...
- Bootstrap Paginator分页插件+ajax 实现动态无刷新分页
之前做分页想过做淘宝的那个,但是因为是后台要求不高,就Bootstrap Paginator插件感觉还蛮容易上手,所以就选了它. Bootstrap Paginator分页插件下载地址: Downlo ...
- jq.paginator分页插件稍加修改
样式一: 样式二: 此分页功能在jq.paginator分页插件上稍加修改. 必加模板html: <div id="jqPaginator"> <div id=& ...
- Bootstrap Paginator分页插件(mark)
Bootstrap Paginator分页插件
- 如何在实际项目中使用PageHelper分页插件
PageHelper是一个分页插件,能够简单快速的帮助开发人员完成常见的分页功能,你只需要简单的使用两行代码就可以完成一个分页效果- 最近做一个科创项目,使用Maven+SSM的环境,有分页的功能,于 ...
- Bootstrap Paginator 分页插件参数介绍及使用
Bootstrap Paginator是一款基于Bootstrap的js分页插件,功能很丰富,个人觉得这款插件已经无可挑剔了.它提供了一系列的参数用来支持用户的定制,提供了公共的方法可随时获得插件状态 ...
- Bootstrap Paginator分页插件使用示例
最近做的asp.netMVC项目中需要对数据列表进行分类,这个本来就是基于bootstrap开发的后台,因此也就想着bootstrap是否有分页插件呢,或者说是基于jquery支持的分页功能,这样整体 ...
- Bootstrap Paginator分页插件的使用
今天,我为大家带来的一款做得非常优秀的分页插件BootStrap Paginator,他是一款js插件,由于本人也是才刚刚搞出来的,所以暂时对它也不是特别了解,只能大楖告诉大家怎么使用.我这里使用的是 ...
随机推荐
- Aspose.Pdf合并图片到PDF文件
将图片和PDF文件合成为新的PDF文件,可以先将图片转换为PDF文件, 然后合成PDF即可, 将图片转换成PDF文件有如下方法: Aspose.Pdf.Document Aspose.Pdf.Gene ...
- [C/C++] C++中new的语法规则
int *x = new int; //开辟一个存放整数的存储空间,返回一个指向该存储空间的地址(即指针) ); //开辟一个存放整数的空间,并指定该整数的初值为100,返回一个指向该存储空间的地址 ...
- 使用HTML5的JavaScript选择器操作页面中的元素
<!doctype html><html lang="en"> <head> <meta charset="UTF-8& ...
- 【题解】NOI2009管道取珠
又是艰难想题的一晚,又是做不出来的一题 (:д:) 好想哭啊…… 这题最关键的一点还是提供一种全新的想法.看到平方和这种东西,真的不好dp.然而我一直陷在化式子的泥潭中出不来.平方能够联想到什么?原本 ...
- 【CF MEMSQL 3.0 A. Declined Finalists】
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
- 解决echarts中X轴文字过长的问题。【转】
axisLabel: { interval: , formatter:function(value) { debugger var ret = "";//拼接加\n返回的类目项 ; ...
- async的用法
package com.example.administrator.myapplication; import android.os.AsyncTask; import android.util.Lo ...
- 两个神奇的函数~~~sscanf、atoi
sscanf 对你没有看错 多了一个s 这个函数有什么作用呢 功能:读取字符串中的int.double.long.long long .float and so on 类型的数据 譬如说 我现在读入了 ...
- php spl库的使用(PHP标准库)【摘抄引用】
文章来源与推荐阅读:阮一峰--PHP SPL笔记 && PHP SPL使用方法和他的威力 1.SPL 是什么? SPL:standard php library php标准库,此 ...
- SpringMVC学习 -- ModelAndView , Model , ModelMap , Map 及 @SessionAttributes 的使用
输出模型数据: ModelAndView:处理方法返回值类型为 ModelAndView 时 , 其中包含视图和模型信息.方法体即可通过该对象添加模型数据 , 即 SpringMVC 会把 Model ...