Django提供了一個新的類來幫助你管理分頁數據,這個類存放在django/core/paginator.py
.它可以接收列表、元組或其它可迭代的對象。
class Paginator(object): def __init__(self, object_list, per_page, orphans=0, allow_empty_first_page=True): self.object_list = object_list self.per_page = int(per_page) self.orphans = int(orphans) self.allow_empty_first_page = allow_empty_first_page ……
基本語法實例
#!/usr/bin/env python# _*_ coding:utf-8 _*_ import os from django.core.paginator import Paginatorobjects = ['john','paul','george','ringo','lucy','meiry','checy','wind','flow','rain']<br>p = Paginator(objects,3) # 3條數據為一頁,實例化分頁對象print p.count # 10 對象總共10個元素print p.num_pages # 4 對象可分4頁print p.page_range # xrange(1, 5) 對象頁的可迭代范圍 page1 = p.page(1) # 取對象的第一分頁對象print page1.object_list # 第一分頁對象的元素列表['john', 'paul', 'george']print page1.number # 第一分頁對象的當前頁值 1 page2 = p.page(2) # 取對象的第二分頁對象print page2.object_list # 第二分頁對象的元素列表 ['ringo', 'lucy', 'meiry']print page2.number # 第二分頁對象的當前頁碼值 2 print page1.has_previous() # 第一分頁對象是否有前一頁 Falseprint page1.has_other_pages() # 第一分頁對象是否有其它頁 True print page2.has_previous() # 第二分頁對象是否有前一頁 Trueprint page2.has_next() # 第二分頁對象是否有下一頁 Trueprint page2.next_page_number() # 第二分頁對象下一頁碼的值 3print page2.previous_page_number() # 第二分頁對象的上一頁碼值 1print page2.start_index() # 第二分頁對象的元素開始索引 4print page2.end_index() # 第2分頁對象的元素結束索引 6
官方解釋在視圖中的應用
from django.core.paginator import Paginator, EmptyPage, PageNotAnIntegerfrom django.shortcuts import render def listing(request): contact_list = Contacts.objects.all() paginator = Paginator(contact_list, 25) # Show 25 contacts per page page = request.GET.get('page') try: contacts = paginator.page(page) except PageNotAnInteger: # If page is not an integer, deliver first page. contacts = paginator.page(1) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. contacts = paginator.page(paginator.num_pages) return render(request, 'list.html', {'contacts': contacts})
在template的html模板中的應用
{% for contact in contacts %} {# Each "contact" is a Contact model object. #} {{ contact.full_name|upper }}<br /> ...{% endfor %} <div class="pagination"> <span class="step-links"> {% if contacts.has_previous %} <a href="?page={{ contacts.previous_page_number }}">previous</a> {% endif %} <span class="current"> Page {{ contacts.number }} of {{ contacts.paginator.num_pages }}. </span> {% if contacts.has_next %} <a href="?page={{ contacts.next_page_number }}">next</a> {% endif %} </span></div>
新聞熱點
疑難解答