1. 程式人生 > >使用Django實現分頁器功能

使用Django實現分頁器功能

django index imp ace active 開始 cts 獲取 import

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

from django.core.paginator import Paginator

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

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

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

後端代碼:

#導入render和HttpResponse模塊 
from django.shortcuts import render,HttpResponse
#導入Paginator,EmptyPage和PageNotAnInteger模塊
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

def
index(request): """首頁""" # 獲取Book數據表中的所有記錄 post_list = Post.objects.all() print(post_list) # 生成paginator對象,定義每頁顯示10條記錄 paginator = Paginator(post_list, 5) # 從前端獲取當前的頁碼數,默認為1 page = request.GET.get(page, 1) # 把當前的頁碼數轉換成整數類型 currentPage = int(page) try: print(page) post_list = paginator.page(page) # 獲取當前頁碼的記錄 except PageNotAnInteger: post_list = paginator.page(1) # 如果用戶輸入的頁碼不是整數時,顯示第1頁的內容 except EmptyPage: post_list = paginator.page(paginator.num_pages) # 如果用戶輸入的頁數不在系統的頁碼列表中時,顯示最後一頁的內容 return render(request,blog/index.html,locals())

前端代碼:

在需要分頁的地方加入

{% load staticfiles %}
<div class="container">
    <ul class="pagination" id="pager">
        {#上一頁按鈕開始#}
        {# 如果當前頁有上一頁#}
        {% if post_list.has_previous %}
            {#  當前頁的上一頁按鈕正常使用#}
            <li class="previous"><a href="/?page={{ post_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="/?page={{ num }}">{{ num }}</a></li>
            {% else %}
                <li class="item"><a href="/?page={{ num }}">{{ num }}</a></li>

            {% endif %}
        {% endfor %}
        {#頁碼結束#}
        {# 下一頁按鈕開始#}
        {% if post_list.has_next %}
            <li class="next"><a href="/?page={{ post_list.next_page_number }}">下一頁</a></li>
        {% else %}
            <li class="next disabled"><a href="#">下一頁</a></li>
        {% endif %}
        {# 下一頁按鈕結束#}
    </ul>
</div>

使用Django實現分頁器功能