本文實例講述了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 }} <br />{% endfor %}{% if winloglist.has_previous %}<a href="?page={{ winloglist.previous_page_number }}" title="下一頁">上一頁</a> {% 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()的數是一個有效數,但在該頁沒有對象存在時,拋出該異常。
新聞熱點
疑難解答