真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Django實(shí)現(xiàn)分頁功能的方法

這篇文章主要介紹Django實(shí)現(xiàn)分頁功能的方法,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

站在用戶的角度思考問題,與客戶深入溝通,找到巍山網(wǎng)站設(shè)計(jì)與巍山網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋巍山地區(qū)。

當(dāng)頁面因需要展示的數(shù)據(jù)條目過多,導(dǎo)致無法在一個(gè)頁面全部顯示。這時(shí),頁面經(jīng)常會(huì)采用分頁形式進(jìn)行展示,然后每頁顯示 20 或者 50 等條數(shù)據(jù)。分頁經(jīng)常在網(wǎng)站上隨處可見,它大概是這樣子:

Django實(shí)現(xiàn)分頁功能的方法

這樣的實(shí)現(xiàn)不僅提高了用戶體驗(yàn),還是減輕數(shù)據(jù)庫讀取數(shù)據(jù)的壓力。Django 自帶名為 Paginator 的分頁工具, 方便我們實(shí)現(xiàn)分頁功能。本文就講解如何使用 Paginator 實(shí)現(xiàn)分頁功能。

1 Paginator

Paginator 類的作用是將我們需要分頁的數(shù)據(jù)分割成若干份。當(dāng)我們實(shí)現(xiàn)化一個(gè) Paginator 類的實(shí)例時(shí),需要給 Paginator 傳入兩個(gè)參數(shù)。第一個(gè)參數(shù)是數(shù)據(jù)源,可以是一個(gè)列表、元組、以及查詢結(jié)果集 QuerySet。第二個(gè)參數(shù)需要傳入一個(gè)整數(shù),表示每頁顯示數(shù)據(jù)條數(shù)。具體寫法如下:

book_list = []

for x in range(1, 26):  # 一共 25 本書

    book_list.append('Book ' + str(x))

# 將數(shù)據(jù)按照規(guī)定每頁顯示 10 條, 進(jìn)行分割

paginator = Paginator(book_list, 10)

上面代碼中,我們傳入一個(gè)名為 book_list 的列表,該列表中含有 25 本書,然后我們給 Paginator 設(shè)定每頁顯示 10 條數(shù)據(jù),最后得到一個(gè) Paginator 實(shí)例。

另外 Paginator 類中有三個(gè)常用的屬性,它們分別是:

count:表示所有頁面的對(duì)象總數(shù)。

num_pages: 表示頁面總數(shù)。

page_range: 下標(biāo)從 1 開始的頁數(shù)范圍迭代器。

2 Page 對(duì)象

Paginator 類提供一個(gè)** page(number) **函數(shù),該函數(shù)返回就是一個(gè) Page 對(duì)象。參數(shù) number 表示第幾個(gè)分頁。如果 number = 1,那么 page() 返回的對(duì)象是第一分頁的 Page 對(duì)象。在前端頁面中顯示數(shù)據(jù),我們主要的操作都是基于 Page 對(duì)象。具體用法如下:

# 使用  paginator 對(duì)象返回第 1 頁的 page 對(duì)象

books = paginator.page(1)

Page 對(duì)象有三個(gè)常用的屬性:

object_list: 表示當(dāng)前頁面上所有對(duì)象的列表。

numberv: 表示當(dāng)前頁的序號(hào),從 1 開始計(jì)數(shù)。

paginator: 當(dāng)前 Page 對(duì)象所屬的 Paginator 對(duì)象。

除此之外,Page 對(duì)象還擁有幾個(gè)常用的函數(shù):

has_next(): 判斷是否還有下一頁,有的話返回True。

has_previous():判斷是否還有上一頁,有的話返回 True。

has_other_pages():判斷是否上一頁或下一頁,有的話返回True。

next_page_number(): 返回下一頁的頁碼。如果下一頁不存在,拋出InvalidPage 異常。

previous_page_number():返回上一頁的頁碼。如果上一頁不存在,拋出InvalidPage 異常。

3 運(yùn)用

下面是自己編寫的 demo 程序,介紹 Paginator 和 Page 如何一起使用。

3.1 視圖

在 views.py 獲取需要展示的全部數(shù)據(jù),然后使用 Paginator 類對(duì)數(shù)據(jù)進(jìn)行分頁,最后返回第 1 頁面的 page 對(duì)象。page 對(duì)象的作用巨大,一方面展示當(dāng)前分頁數(shù)據(jù),還提供獲取后續(xù)頁面數(shù)據(jù)的接口。

from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage, InvalidPage
from django.http import HttpResponse
from django.shortcuts import render
def paginator_view(request):
    book_list = []
    '''
    數(shù)據(jù)通常是從 models 中獲取。這里為了方便,直接使用生成器來獲取數(shù)據(jù)。
    '''
    for x in range(1, 26):  # 一共 25 本書
        book_list.append('Book ' + str(x))
    # 將數(shù)據(jù)按照規(guī)定每頁顯示 10 條, 進(jìn)行分割
    paginator = Paginator(book_list, 10)
    if request.method == "GET":
        # 獲取 url 后面的 page 參數(shù)的值, 首頁不顯示 page 參數(shù), 默認(rèn)值是 1
        page = request.GET.get('page')
        try:
            books = paginator.page(page)
        # todo: 注意捕獲異常
        except PageNotAnInteger:
            # 如果請(qǐng)求的頁數(shù)不是整數(shù), 返回第一頁。
            books = paginator.page(1)
        except InvalidPage:
            # 如果請(qǐng)求的頁數(shù)不存在, 重定向頁面
            return HttpResponse('找不到頁面的內(nèi)容')
        except EmptyPage:
            # 如果請(qǐng)求的頁數(shù)不在合法的頁數(shù)范圍內(nèi),返回結(jié)果的最后一頁。
            books = paginator.page(paginator.num_pages)
    template_view = 'page.html'
    return render(request, template_view, {'books': books})

3.2 模板

模板的工作就是在 HTML 頁面中填充數(shù)據(jù)。當(dāng)拿到視圖傳遞過來的 books(books 是一個(gè) Page 對(duì)象), 就在 for 循環(huán)中打印數(shù)據(jù)。最后使用 books 根據(jù)頁面情況展示上一頁按鈕,當(dāng)前頁數(shù),總頁數(shù),下一頁按鈕。

{% load staticfiles %}



    
    
    
    
    分頁


             {% for book in books %}             書名: {{ book }}          {% endfor %}     
    {# 實(shí)現(xiàn)分頁標(biāo)簽的代碼 #}     {# 這里使用 bootstrap 渲染頁面 #}              

3.3 運(yùn)行結(jié)果

我在 urls.py 中配置當(dāng)前的 app 訪問路徑是 paginator/。所以使用瀏覽器訪問地址 http://127.0.0.1:8000/paginator/, 看到訪問結(jié)果如下:

Django實(shí)現(xiàn)分頁功能的方法

Django實(shí)現(xiàn)分頁功能的方法

Django實(shí)現(xiàn)分頁功能的方法

以上是Django實(shí)現(xiàn)分頁功能的方法的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


本文名稱:Django實(shí)現(xiàn)分頁功能的方法
文章URL:http://weahome.cn/article/pdigeh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部