Django-25 分頁 Paginator 對象 Page對象 例子

  • 分頁是指在web頁面有大量數據需要顯示,爲了閱讀方便在每個頁面中只顯示部分數據
  • 優點:
    1,方便閱讀
    2,減少數據提取量,減輕服務器壓力
  • Django提供了Paginator類可以方便的實現分頁功能
  • Paginator類位於 'django.core.paginator' 模塊中

Paginator 對象

負責分頁數據整體的管理
對象的構造方法
paginator = Paginator(object_list,per_page)

  • 參數
    • object_list 需要分類數據的對象列表
    • per_page 每頁數據個數
  • 返回值
    • Paginator的對象

Paginator 屬性

  • count:需要分頁數據的對象總數
  • num_pages:分頁後的頁面總數
  • page_range:從1開始的range對象,用於記錄當前碼數
  • per_page:每頁數據的個數

Paginator方法

paginator對象.page(number)

  • 參數number爲頁碼信息(從1開始)
  • 返回當前number頁對應的頁信息
  • 如果提供的頁碼不存在,拋出InvalidPage異常

Paginator異常exception

InvalidPage:總的異常基類,包含以下兩個異常子類

  • PageNotAnInteger:當向page() 傳入一個不是整數的值時拋出
  • EmptyPage:當向page()提供一個有效值,但是那個頁面上沒有任何對象時拋出

Page對象

負責具體某一頁的數據的管理
創建對象
Paginator對象的page()方法返回Page對象
page = paginator.page(頁碼)

Page對象屬性

  • object_list:當前頁上所有數據對象的列表
  • number:當前頁的序號,從1開始
  • pageinator:當前page對象相關的Paginator對象

Page對象方法

  • has_next():如果有下一頁返回True
  • has_previous():如果有上一頁返回True
  • has_other_pages():如果有上一頁或下一頁返回True
  • next_page_number():返回下一頁的頁碼,如果下一頁不存在,拋出InvalidPage異常
  • previos_page_number():返回上一頁的頁碼,如果上一頁不存在,拋出InvalidPage異常

例子

/templates/index/test_page.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>分頁</title>
</head>
<body>
    
{% for p in c_page %}
    <p>
        {{p}}
    <p>
{% endfor %}

{% if c_page.has_previous %}
    <a href="/test_page?page={{ c_page.previous_page_number }}">上一頁</a>
{% else %}
    上一頁
{% endif %}

{% for p_num in paginator.page_range %}
    {% if p_num == c_page.number %} 
        {{ p_num }}
    {% else %}
        <a href="/test_page?page={{ p_num }}">{{ p_num }}</a>
    {% endif %}
{% endfor %}

{% if c_page.has_next %}
    <a href="/test_page?page={{c_page.next_page_number}}">下一頁</a>
{% else%}
    下一頁
{% endif %}

</body>
</html>

views.py

def test_page(request):
    #/test_page/4
    #/test_page?page=1
    page_num = request.GET.get('page',1)
    all_data = ['a','b','c','d','e','f','g','h','i']
    #初始化paginator
    paginator = Paginator(all_data,2)
    #初始化,具體頁碼的page對象
    c_page = paginator.page(int(page_num))
    return render(request,'index/test_page.html',locals())
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章