Paginator
分頁器的使用
>>> from django.core.paginator import Paginator >>> objects = ['john', 'paul', 'george', 'ringo'] >>> p = Paginator(objects, 2) >>> p.count #數據總數 4 >>> p.num_pages #總頁數 2 >>> type(p.page_range) # `<type 'rangeiterator'>` in Python 2. <class 'range_iterator'> >>> p.page_range #頁碼的列表 range(1, 3) # =========[1,2] >>> page1 = p.page(1) #第1頁的page對象 >>> page1 <Page 1 of 2> >>> page1.object_list #第1頁的數據 ['john', 'paul'] >>> page2 = p.page(2) >>> page2.object_list #第2頁的數據 ['george', 'ringo'] >>> page2.has_next() #是否有下一頁 False >>> page2.has_previous() #是否有上一頁 True >>> page2.has_other_pages() #是否有其餘頁 True >>> page2.next_page_number() #下一頁的頁碼 Traceback (most recent call last): ... EmptyPage: That page contains no results >>> page2.previous_page_number() #上一頁的頁碼 1 >>> page2.start_index() # 本頁第一條記錄的序數(從1開始) 3 >>> page2.end_index() # 本頁最後錄一條記錄的序數(從1開始) 4 >>> p.page(0) #錯誤的頁,拋出異常 Traceback (most recent call last): ... EmptyPage: That page number is less than 1 >>> p.page(3) #錯誤的頁,拋出異常 Traceback (most recent call last): ... EmptyPage: That page contains no results
實現一個分頁效果
templates:
{% load staticfiles %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="{% static 'bootstrap.css' %}"> </head> <body> <div class="container"> <h4>分頁器</h4> <ul> {% for book in book_list %} <li>{{ book.title }} {{ book.price }}</li> {% endfor %} </ul> <ul class="pagination" id="pager"> {% if book_list.has_previous %} <li class="previous"><a href="/blog/?page={{ book_list.previous_page_number }}">上一頁</a></li> {% else %} <li class="previous disabled"><a href="#">上一頁</a></li> {% endif %} {% for num in paginator.page_range %} {% if num == currentPage %} <li class="item active"><a href="/blog/?page={{ num }}">{{ num }}</a></li> {% else %} <li class="item"><a href="/blog/?page={{ num }}">{{ num }}</a></li> {% endif %} {% endfor %} {% if book_list.has_next %} <li class="next"><a href="/blog/?page={{ book_list.next_page_number }}">下一頁</a></li> {% else %} <li class="next disabled"><a href="#">下一頁</a></li> {% endif %} </ul> </div> </body> </html>
views:
from django.shortcuts import render,HttpResponse # Create your views here. from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from app01.models import * def index(request): ''' 批量導入數據: Booklist=[] for i in range(100): Booklist.append(Book(title="book"+str(i),price=30+i*i)) Book.objects.bulk_create(Booklist) ''' book_list=Book.objects.all() paginator = Paginator(book_list, 10) page = request.GET.get('page',1) currentPage=int(page) try: print(page) book_list = paginator.page(page) except PageNotAnInteger: book_list = paginator.page(1) except EmptyPage: book_list = paginator.page(paginator.num_pages) return render(request,"index.html",locals())