django实现分页的方法

   本文实例讲述了django实现分页的方法。分享给大家供大家参考。具体如下:

  Python代码如下:

  ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Create your views here.
from django.shortcuts import render_to_response
from winlog.log_dj.models import Winlog
from django.core.paginator import Paginator,InvalidPage,EmptyPage,PageNotAnInteger
def index(request):
after_range_num = 5
before_range_num = 4
try:
page=int(request.GET.get('page','1'))
if page < 1:
page=1
except ValueError:
page=1
winlog_list = Winlog.objects.all().order_by('-id')
paginator = Paginator(winlog_list, 10)
try:
winloglist = paginator.page(page)
except (EmptyPage,InvalidPage,PageNotAnInteger):
winloglist = paginator.page(1)
if page >= after_range_num:
page_range = paginator.page_range[page-after_range_num:page+before_range_num]
else:
page_range = paginator.page_range[0:int(page)+before_range_num]
return render_to_response('log_dj/index.html', locals())

  HTML页面如下:

  ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

{% for winlog in winloglist.object_list %}
{{ winlog.date }}|{{ winlog.time }} <br />
{% endfor %}
{% if winloglist.has_previous %}
<a href="?page={{ winloglist.previous_page_number }}" title="下一页">上一页</a>&
nbsp;
{% endif %}
{% for p in page_range %}
{% ifequal p winloglist.number %}
<span>{{p}}</span>
{% else %}
<a href="?page={{p}}" title="第{{p}}页">{{p}}</a>
{% endifequal %}
{% endfor %}
 
{% if winloglist.has_next %}
<a href="?page={{ winloglist.next_page_number }}" title="下一页">下一页</a>
;
{% endif %}
<!-- 第 {{ userList.number }} 页 共 {{ userList.paginator.num_pages }} 页-->

  Paginator对象:

  类Paginator:

  class Paginator(object_list,per_page,orphans=0,allow_empty_first_page=True)

  必须提供的参数:

  object_list:一个列表或元组,元素是django QuerySet或是包含count()或__len__()方法的可切片对象。

  per_page:包含在一页中最多的条目数量。

  可选参数:

  orphans:在最后一页中充许的最少条目数量,默认是0.当最后一页条目数量小于或等于orphans时,这些条目加到本页的上一页中。

  allow_empty_first_page:是否充许第一页为空。如设为False且object_list为空,则抛出EmptyPage异常。

  方法:

  Paginator.page(number):返回一个Page对象,序号是始于1.如给出的页号不存在,抛出InvalidPage异常。

  属性:

  Paginator.num_pages:页面总页数

  Paginator.page_range:页面数的范围,始于1,如[1,2,3,4]。

  InvalidPage异常:

  如要求的页面无效或页面中没有对象,page()抛出InvalidPage异常。

  PageNotAnInterger:当提供给page()的数不是整数是抛出该异常。

  EmptyPage:当提供给page()的数是一个有效数,但在该页没有对象存在时,抛出该异常。

  Page对象:

  class Page(object_list,number,paginator):

  一般不手工创建Pages,可以使用Paginator.page().

  方法:

  Page.has_next():如有下一页则返回True

  Page.has_previous():如有上一页则返回True

  Page.has_other_pages():如有上一页或下一页返回True

  Page.next_page_number():返回下一页的页码。不管下一页是否存在都返回。

  Page.previous_page_number():返回上一页的页码。不管上一页是否存在都返回。

  Page.start_index():返回当前页面中第一个对象的序号,序号始于1.例如:将一个包含5个对象的列表分成每页2个对象,则第二页的start_index()返回3.

  Page.end_index():返回当前页面中最一个对象的序号。

  属性:

  Page.object_list:当前页面中所有的对象

  Page.number:当前页面的页码,始于1

  Page.paginator:页面相关的Pageinator对象。

  希望本文所述对大家的Python程序设计有所帮助。

时间: 2024-10-30 19:04:31

django实现分页的方法的相关文章

android实现listview分页的方法

  本文实例讲述了android实现listview分页的方法.分享给大家供大家参考.具体分析如下: 最近做了下listview的分页,跟WEB上的分页是一个意思,需要那几个分页参数,不同的是sqlite中分页的查询语句,简便的方法需要用Limit,Offset关键字,前者是查询每页展示的记录数,后者是越过多少记录数,说得明白点就是忽略前面多少行记录之后,取多少行记录 我分页采用了一个重要的类Page,通过封装Page类,做为参数传递进来,返回出去也是个Page对象 ? 1 2 3 4 5 6

基于ajax实现无刷新分页的方法_AJAX相关

本文实例讲述了基于ajax实现无刷新分页的方法.分享给大家供大家参考.具体如下: 在普通的分页中,一旦页码改变,则url改变,整个页面都会刷新,如果我们希望页码的改变不影响整个网页的变动,可以使用ajax技术. AJAX 是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. 通过客户端html代码,用ajax把服务器中的数据通过get方式传递过来,显示在html中. <!doct

php+ajax实现无刷新分页的方法_php技巧

本文实例讲述了php+ajax实现无刷新分页的方法.分享给大家供大家参考.具体实现方法如下: 这是一款基于原生态的php +js +ajax 的分页程序实例,我们详细的从数据库创建到js,php,html页面的创建来告诉你如何实现ajax分页调用数据的方法. 具体步骤如下: 一.创建数据库 SQL语句如下: 复制代码 代码如下: CREATE TABLE `tb_user` (   `id` int(10) NOT NULL auto_increment,   `username` varcha

asp access 大数据量的分页的方法

'本款分页效果支持'分页,分页效果:首页 上一页 ... 2 3 4 5 6 7 ... 下一页 最后一页这种分页模式,有论坛风格 'id title content status updatetime '1 t1 c1 1 2010-5-26 21:16:06 '2 t2 c2 1 2010-5-26 21:16:09 '3 t3 c3 1 2010-5-26 21:16:12 '4 t4 c4 1 2010-5-26 21:16:15 '5 t5 c5 1 2010-5-26 21:16:2

Yii视图操作之自定义分页实现方法_php实例

本文实例讲述了Yii视图操作之自定义分页实现方法.分享给大家供大家参考,具体如下: 1. 视图文件调用cgridview,clistview时候调用自定义的分页方法 <?php $this->widget('zii.widgets.grid.CGridView', array( 'id'=>'news-grid', 'dataProvider'=>$model->search(), 'filter'=>$model, 'template'=>'{items}{su

asp.net实现access数据库分页的方法_实用技巧

asp.net操作access数据库是常见的数据库操作应用,本文就来实例讲解一下asp.net实现access数据库分页的方法.希望对大家的asp.net程序设计能有所帮助. 具体实例代码如下: <divclass="page"id="ctrlRecordPage"> 总<asp:LabelID="Zpage"runat="server"Text="1"></asp:Label

jQuery EasyUI datagrid实现本地分页的方法_jquery

本文实例讲述了jQuery EasyUI datagrid实现本地分页的方法.分享给大家供大家参考.具体如下: 一般分页都是后台做,前端做无论从哪方面考虑都不合适.但是有的时候还是有这种需求. 这里重点用到了pagination的监听,以及JS数组的slice方法来完成.代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title></title&g

在Thinkphp中使用ajax实现无刷新分页的方法_php实例

在Thinkphp目录的Lib\ORG\Util\目录里新建AjaxPage.class.php,写入一下内容: <?php // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK IT ] // +---------------------------------------------------------------

Smarty分页实现方法完整实例_php实例

本文实例讲述了Smarty分页实现方法.分享给大家供大家参考,具体如下: 首先是PHP文件部分: <?php require("include.php"); //包含smarty配置部分 require 'conn.php'; //包含数据库配置部分 $pagesize=10; //设置每页数据显示数量 $url=$_SERVER['REQUEST_URI']; $url=parse_url($url); $url=$url['path']; $sql="SELECT