Django之分頁器

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