程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> django實現分頁的方法

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程序設計有所幫助。

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved