欢迎来到山村网

django实现分页的方法

2019-03-02 13:27:38浏览:967 来源:山村网   
核心摘要:  本文实例讲述了django实现分页的方法。分享给大家供大家参考。具体如下:  Python代码如下:  ? 1234567891011121314151

  本文实例讲述了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程序设计有所帮助。

(责任编辑:豆豆)
下一篇:

Python使用xlrd模块操作Excel数据导入的方法

上一篇:

Django imgareaselect手动剪切头像实现方法

  • 信息二维码

    手机看新闻

  • 分享到
打赏
免责声明
• 
本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们 xfptx@outlook.com