Django 資料分頁處理
阿新 • • 發佈:2019-02-07
在檢視中的應用
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.shortcuts import render def listing(request): contact_list = Contacts.objects.all() paginator = Paginator(contact_list, 25) # Show 25 contacts per page # paginator = Paginator(contact_list, 25,5) # 如果最後一頁的資料少於5條,合併到上一頁 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>
#!/usr/bin/env python # _*_ coding:utf-8 _*_ import os from django.core.paginator import Paginator objects = ['john','paul','george','ringo','lucy','meiry','checy','wind','flow','rain'] 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() # 第一分頁物件是否有前一頁 False print page1.has_other_pages() # 第一分頁物件是否有其它頁 True print page2.has_previous() # 第二分頁物件是否有前一頁 True print page2.has_next() # 第二分頁物件是否有下一頁 True print page2.next_page_number() # 第二分頁物件下一頁碼的值 3 print page2.previous_page_number() # 第二分頁物件的上一頁碼值 1 print page2.start_index() # 第二分頁物件的元素開始索引 4 print page2.end_index() # 第2分頁物件的元素結束索引 6