Django實現分頁器功能


要使用Django實現分頁器,必須從Django中導入Paginator模塊

from django.core.paginator import Paginator

假如現在有150條記錄要顯示,每頁顯示10條

 1 >>> from django.core.paginator import Paginator#導入Paginator模塊
 2 >>> list1=[i for i in range(0,150)]#使用列表生成器生成一個包含150個數字的列表
 3 >>> page1=Paginator(list1,10)#生成一個Paginator對象
 4 >>> print(page1.count)#打印總的記錄數,即列表list1的長度
 5 150
 6 >>> print(page1.num_pages)#打印總的頁數,即總記錄數除以每頁顯示的條目數
 7 15
 8 >>> print(page1.page_range)#頁數的列表
 9 range(1, 16)
10 >>> print(page1.page(1))#打印第一頁的page對象
11 <Page 1 of 15>
12 >>> page1.page(1).object_list#打印第一頁的所有記錄
13 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
14 >>> page1.page(2).object_list#打印第二頁的所有記錄
15 [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
16 >>> page1.page(2).next_page_number()#打印當前的頁(第2頁)的下一頁的頁碼
17 3
18 >>> page1.page(2).has_next()#第2頁是否有下一頁
19 True
20 >>> page1.page(2).has_previous()#第2頁是否有上一頁
21 True
22 >>> page1.page(2).has_other_pages()#第2是否有其他頁
23 True
24 >>> page1.page(2).start_index()#第2頁第一條記錄的序號
25 11
26 >>> page1.page(2).end_index()#第2頁最后一條記錄的序號
27 20
28 >>> page1.page(0)#第0頁是否有記錄,會報錯
29 Traceback (most recent call last):
30   File "<stdin>", line 1, in <module>
31     ...
32     raise EmptyPage(_('That page number is less than 1'))
33 django.core.paginator.EmptyPage: <exception str() failed>
34 >>> page1.page(15)#打印第15頁的對象
35 <Page 15 of 15>

例子,使用Django實現一個分頁效果

前端代碼:

 1 {% load staticfiles %}
 2 <!DOCTYPE html>
 3 <html lang="en">
 4 <head>
 5     <meta charset="UTF-8">
 6     <title>Title</title>
 7     <link rel="stylesheet" href="{% static 'bootstrap/css/bootstrap.css' %}">
 8 </head>
 9 <body>
10 <div class="container">
11     <h4>分頁器</h4>
12     <ul>
13         #遍歷boot_list中的所有元素
14         {% for book in book_list %}
15             #打印書籍的名稱和價格
16             <li>{{ book.title }} {{ book.price }}</li>
17         {% endfor %}
18     </ul>
19     <ul class="pagination" id="pager">
20         {#上一頁按鈕開始#}
21         {# 如果當前頁有上一頁#}
22         {% if book_list.has_previous %}
23             {#  當前頁的上一頁按鈕正常使用#}
24             <li class="previous"><a href="/?page={{ book_list.previous_page_number }}">上一頁</a></li>
25         {% else %}
26             {# 當前頁的不存在上一頁時,上一頁的按鈕不可用#}
27             <li class="previous disabled"><a href="#">上一頁</a></li>
28         {% endif %}
29         {#上一頁按鈕結束#}
30         {# 頁碼開始#}
31         {% for num in paginator.page_range %}
32 
33             {% if num == currentPage %}
34                 <li class="item active"><a href="/?page={{ num }}">{{ num }}</a></li>
35             {% else %}
36                 <li class="item"><a href="/?page={{ num }}">{{ num }}</a></li>
37 
38             {% endif %}
39         {% endfor %}
40         {#頁碼結束#}
41         {# 下一頁按鈕開始#}
42         {% if book_list.has_next %}
43             <li class="next"><a href="/?page={{ book_list.next_page_number }}">下一頁</a></li>
44         {% else %}
45             <li class="next disabled"><a href="#">下一頁</a></li>
46         {% endif %}
47         {# 下一頁按鈕結束#}
48     </ul>
49 </div>
50 </body>
51 </html>
View Code

后端代碼:

 1 #導入render和HttpResponse模塊
 2 from django.shortcuts import render,HttpResponse
 3 
 4 #導入Paginator,EmptyPage和PageNotAnInteger模塊
 5 from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
 6 
 7 #從Django項目的應用中導入模塊
 8 from app01.models import *
 9 
10 def index(request):
11 
12     #獲取Book數據表中的所有記錄
13     book_list=Book.objects.all()
14 
15     #生成paginator對象,定義每頁顯示10條記錄
16     paginator = Paginator(book_list, 10)
17 
18     #從前端獲取當前的頁碼數,默認為1
19     page = request.GET.get('page',1)
20     
21     #把當前的頁碼數轉換成整數類型
22     currentPage=int(page)
23 
24     try:
25         print(page)
26         book_list = paginator.page(page)#獲取當前頁碼的記錄
27     except PageNotAnInteger:
28         book_list = paginator.page(1)#如果用戶輸入的頁碼不是整數時,顯示第1頁的內容
29     except EmptyPage:
30         book_list = paginator.page(paginator.num_pages)#如果用戶輸入的頁數不在系統的頁碼列表中時,顯示最后一頁的內容
31 
32     return render(request,"index.html",locals())
View Code

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM