django分页功能的具体实现

django提供了paginator类来帮助管理分页数据,这个类存放在django/core/paginator.py.它可以接收列表、元组或其它可迭代的对象。

基本语法示例:

 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

官方应用示例:

后台views.py代码:

 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})

前台模板代码

 1 {% for contact in contacts %}
 2     {# Each "contact" is a Contact model object. #}
 3     {{ contact.full_name|upper }}
4 ... 5 {% endfor %} 6 7
class="pagination"> 8 class="step-links"> 9 {% if contacts.has_previous %} 10 "?page={{ contacts.previous_page_number }}">previous 11 {% endif %} 12 13 class="current"> 14 Page {{ contacts.number }} of {{ contacts.paginator.num_pages }}. 15 16 17 {% if contacts.has_next %} 18 "?page={{ contacts.next_page_number }}">next 19 {% endif %} 20 21

 

转载于:https://www.cnblogs.com/ailex/p/10062257.html

你可能感兴趣的:(django分页功能的具体实现)