django實現分頁的方法

來源:互聯網
上載者:User
本文執行個體講述了django實現分頁的方法。分享給大家供大家參考。具體如下:

Python代碼如下:

#!/usr/bin/env python# -*- coding: utf-8 -*-# Create your views here.from django.shortcuts import render_to_responsefrom winlog.log_dj.models import Winlogfrom django.core.paginator import Paginator,InvalidPage,EmptyPage,PageNotAnIntegerdef 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 }} 
{% endfor %}{% if winloglist.has_previous %}上一頁 {% endif %}{% for p in page_range %}{% ifequal p winloglist.number %}{{p}}{% else %}{{p}}{% endifequal %}{% endfor %} {% if winloglist.has_next %}下一頁 {% endif %}

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程式設計有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.