1. 程式人生 > >Django-分頁器

Django-分頁器

print current div set 批量 後臺 oct ews append

一、分頁試圖函數

>>> 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

二、分頁實例

  前端展示頁面:

{% 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>

  後臺處理邏輯:

  

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())

  

Django-分頁器