django实现分页的方法

作者:NavCat 时间:2023-07-04 02:57:44 

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

Python代码如下:


#!/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页面如下:


{% 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 %}
&nbsp;
{% if winloglist.has_next %}
<a href="?page={{ winloglist.next_page_number }}" title="下一页">下一页</a>&nbsp
;
{% 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程序设计有所帮助。

标签:django,分页
0
投稿

猜你喜欢

  • Go 互斥锁和读写互斥锁的实现

    2024-04-25 15:00:41
  • 关于TypeScript开发的6六个实用小技巧分享

    2024-04-16 08:59:26
  • JS设计模式之单例模式(一)

    2024-05-11 09:06:29
  • 深入浅析Django MTV模式

    2021-08-18 07:55:32
  • sql server中datetime字段去除时间的语句

    2024-01-23 17:47:57
  • jQuery 横向滚动图片

    2009-03-11 13:09:00
  • 在Windows系统上搭建Nginx+Python+MySQL环境的教程

    2024-01-24 08:04:40
  • Sqlserver2005日志文件太大如何减小

    2024-01-25 10:48:53
  • 简单谈谈GET和POST有什么区别

    2022-06-06 04:53:41
  • Python-pip配置国内镜像源的安装方式

    2023-08-22 21:55:38
  • Python实现的井字棋(Tic Tac Toe)游戏示例

    2023-03-08 23:22:34
  • Mysql数据库锁定机制详细介绍

    2024-01-27 00:57:59
  • Python编程实现正则删除命令功能

    2022-10-19 16:45:08
  • Python基础之hashlib模块subprocess模块logging模块

    2022-08-12 02:45:52
  • django form和field具体方法和属性说明

    2023-07-24 11:22:45
  • 解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)

    2023-08-24 00:25:21
  • 常见Dreamweaver使用过程中的问题及解决办法

    2011-03-17 16:16:00
  • 加快Firefox 3.5启动速度的方法

    2009-07-16 15:22:00
  • shtml网页SSI使用详解

    2008-02-20 19:13:00
  • 有关asp的系统变量ServerVariables (“HTTP_USER_AGENT“)?

    2009-10-29 12:12:00
  • asp之家 网络编程 m.aspxhome.com