django分頁功能的具體實現

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>
相關文章
相關標籤/搜索