程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Django15:分頁

編輯:Python

1、定義

        分頁是指在web頁面有大量數據需要顯示,為了閱讀方便在每頁中只顯示部分數據。優點是方便閱讀和減少數據量提取,減輕服務器壓力。

        Django提供了Paginator類可方便的實現分頁功能。Paginator類位於’django.core.paginator’模塊中。

2、Paginator

        負責分頁數據整體的管理。

(1)Paginator對象構造方法:

paginator = Paginator(object_list, per_page)

參數:

  • object_list:需要分頁數據的對象列表
  • per_page:每頁數據個數

返回值:

Paginator的對象

(2)Paginator屬性

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

(3)pagintor對象.page(number)

參數number為頁碼信息(從1開始);

返回當前number也對應的頁信息;

如果提供的頁碼不存在,拋出Invalidpage異常,包含兩種異常子類:

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

3、page對象

(1)定義

        負責某一頁數據的管理。

(2)創建對象

        Paginator對象的page()方法返回page對象。

page = Paginator.page(頁碼)

(3)Page對象屬性

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

(4)Page對象方法

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

例:
(a)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']
# 初始化paginator
paginator = Paginator(all_data, 2)
# 初始化具體頁碼的page對象
c_page = paginator.page(int(page_num))
return render(request, 'test_page.html', locals())

(b)urls.py

urlpatterns = [
path('admin/', admin.site.urls),
# path('test_mw/', views.test_mw),
path('test_csrf', views.test_csrf),
path('test_page', views.test_page),
]

(c)template.test_page

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>分頁</title>
</head>
<body>
<!-- <a href="/make_page_csv?page={
{ c_page.number }}">生成</a> -->
{% 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>

訪問:http://192.168.28.128:8000/test_page


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved