Django2.1中的分頁功能詳解

django的分頁功能類將我們常用的多種方法均封裝在Paginator類,根據這些方法我們均可深度定製我們的分頁功能。

首先來看看[Paginator] 類的構造方法:

class Paginator(object_list, per_page, orphans=0, allow_empty_first_page=True)

 

必選參數:

  1. objects_list : 必須是列表/元組或Django所生成的QuerySet對象,或具有count()__len __()方法的其他可切片對象。
  2. per_page: 每頁顯示多少個數量,是一個整數

可選參數:

  1. orphans: 默認值爲零,無論最後一頁剩餘多少條數據,都另起一頁,否則將剩餘的合併到上一頁,舉例:假如當前分頁一共11頁,第11頁的只有兩條數據,那麼我們定義orphans=2,則分頁總數剩餘10頁,最後兩條數據合併到第10頁。
  2. allow_empty_first_page: 是否允許第一頁爲空。 如果爲False同時object_list爲空,則將引發EmptyPage錯誤,默認值爲True.

Paginator的方法,2.0版後新增:

  1. Paginator.get_page(number) 方法:返回當前頁頁碼,並具有處理超出頁碼範圍和無效頁碼的狀況,頁碼不是數字返回第一頁,超出返回最後一頁。
  2. Paginator.page(number)方法: 返回指定頁碼的內容,如果給定的頁碼不存在,則引發InvalidPage。

屬性:

  1. Paginator.count: 所有頁面中的對象總數。
  2. Paginator.num_pages: 分頁總數
  3. Paginator.page_range: 迭代頁碼,返回的是一個[1,2,3,4,...]這樣的列表。

瞭解了上邊這些之後我們既可以在模板中直接使用Page對象所提供的方法,直接使用!

Page objects對象中的方法及屬性:

  1. Page.has_next()如果有下一頁返回True.
  2. Page.has_previous() 如果有上一頁返回True.
  3. Page.has_other_pages() 如果同時具有上下頁返回True.
  4. Page.next_page_number() 返回下一頁的頁碼.
  5. Page.previous_page_number() 返回上一頁的頁碼.
  6. Page.start_index() 返回當前頁面的第一條數據.
  7. Page.end_index() 返回當前頁的最後一條數據

屬性

  1. Page.object_list 此頁上的對象列表。
  2. Page.number此頁的基於 1 的頁碼。
  3. Page.paginator關聯的 Paginator 對象。

案例詳解:

# views.py

from django.core.paginator import Paginator

def list(request):
    LIST = []
    for i in range(1,102):
        LIST.append(i)
    paginator = Paginator(LIST, 10, orphans=2, )
    pages = paginator.page_range  #  生成所有頁碼
    pages_num = paginator.num_pages # 總也數
    gd_page = paginator.page(5)  # 調用指定頁面的內容
    page = request.GET.get('page')  # 當前頁面
    contacts = paginator.get_page(page)  # 當前頁並具有處理超出頁碼範圍的狀況,頁碼不是數字返回第一頁,超出返回最後一頁
    return render(request, 'notes/list.html',{'contacts':contacts, 'pages':pages, 'pagenums':pages_num, 'gd_page':gd_page})

  

# list.html

 {% for contact in contacts %}
        <li>{{ contact|upper }}</li>
    {% endfor %}

    <h1>分頁練習</h1>

{% if contacts.has_previous %}
    <li>上一頁頁碼:{{ contacts.previous_page_number }}</li>
    <a href="?page={{ contacts.previous_page_number }}">上一頁</a>
{% endif %}
    <li>當前頁碼:{{ contacts.number }}</li>
{% if contacts.has_next %}
    <li>下一頁頁碼:{{ contacts.next_page_number }}</li>
    <a href="?page={{ contacts.next_page_number }}">下一頁</a>
{% endif %}

    {{ contacts.start_index }}
    {{ contacts.end_index }}

   <p> 所有頁碼:</p>
    <div class="pagetions">

{% for page in pages %}
    {% if page == contacts.number %}
        <a class="active" href="?page={{ page }}">{{ page }}</a>
    {% else %}
        <a href="?page={{ page }}">{{ page }}</a>
    {% endif %}
{% endfor %}

</div>
總頁數:{{ pagenums }}
{% for gd in gd_page %}
   <li>{{ gd }}</li>
    {% endfor %}
給定頁碼:{{ gd_page }}

創作不易,我會持續分享關於Django的相關知識,有興趣的朋友可以關注本人微信公衆號:幸福關中, 如果您覺得不錯的話,打賞以下小編,小編會更有動力分享更多關於Django方面的知識,歡迎大家加小編微信交流Django知識,備註Django,小編微信:xingfuguanzhong。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章