django提供了paginator
類來幫助管理分頁數據,這個類存放在django/core/paginator.py
.它能夠接收列表、元組或其它可迭代的對象。html
基本語法示例:python
1 #!/usr/bin/env python 2 # _*_ coding:utf-8 _*_ 3 4 import os 5 6 from django.core.paginator import Paginator 7 objects = ['john','paul','george','ringo','lucy','meiry','checy','wind','flow','rain'] # 演示用分類數據源 8 p = Paginator(objects,3) # 實例化分頁對象,將objects 3條數據分爲一頁, 9 print p.count # 10 對象總數 10 print p.num_pages # 4 對象總頁數 11 print p.page_range # xrange(1, 5) 對象頁的可迭代列表【元組】 12 13 page1 = p.page(1) # 取對象的第1分頁對象 14 print page1.object_list # 第1分頁對象的元素列表['john', 'paul', 'george'] 15 print page1.number # 第1分頁對象的當前頁值 1
21 print page1.has_previous() # 第1分頁對象是否有前一頁 False 22 print page1.has_other_pages() # 第1分頁對象是否有其它頁 True 24 print page2.has_previous() # 第1分頁對象是否有前一頁 True 25 print page1.has_next() # 第1分頁對象是否有下一頁 True 26 print page1.next_page_number() # 第1分頁對象下一頁碼的值 3 27 print page1.previous_page_number() # 第1分頁對象的上一頁碼值 1 28 print page1.start_index() # 第1分頁對象的元素開始索引 4 29 print page1.end_index() # 第1分頁對象的元素結束索引 6
官方應用示例:django
後臺views.py代碼:spa
1 from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger 2 from django.shortcuts import render 3 4 def listing(request): 5 contact_list = Contacts.objects.all() 6 paginator = Paginator(contact_list, 25) # Show 25 contacts per page 7 8 page = request.GET.get('page') 9 try: 10 contacts = paginator.page(page) 11 except PageNotAnInteger: 12 # If page is not an integer, deliver first page. 13 contacts = paginator.page(1) 14 except EmptyPage: 15 # If page is out of range (e.g. 9999), deliver last page of results. 16 contacts = paginator.page(paginator.num_pages) 17 18 return render(request, 'list.html', {'contacts': contacts})
前臺模板代碼code
1 {% for contact in contacts %} 2 {# Each "contact" is a Contact model object. #} 3 {{ contact.full_name|upper }}<br /> 4 ... 5 {% endfor %} 6 7 <div class="pagination"> 8 <span class="step-links"> 9 {% if contacts.has_previous %} 10 <a href="?page={{ contacts.previous_page_number }}">previous</a> 11 {% endif %} 12 13 <span class="current"> 14 Page {{ contacts.number }} of {{ contacts.paginator.num_pages }}. 15 </span> 16 17 {% if contacts.has_next %} 18 <a href="?page={{ contacts.next_page_number }}">next</a> 19 {% endif %} 20 </span> 21 </div>