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>