Django實(shí)現(xiàn)基于類的分頁功能
開發(fā)個(gè)人博客時(shí)往往避免不了分頁功能的實(shí)現(xiàn),實(shí)現(xiàn)方法大體上分為函數(shù)和類兩種。本文基于類實(shí)現(xiàn)分頁功能,以下是詳細(xì)代碼:
class Page:
page_num = 0
total_count = 0
tartype = ""
total_page = 0 # 總頁數(shù)
per_page = 8 # 每頁顯示8篇文章
max_page = 11 # 每頁最大展示頁數(shù)選項(xiàng)
half_page = max_page // 2
category = "" # 標(biāo)記該鏈接所屬分類ID,首頁默認(rèn)為空
def __init__(self, page_num, total_count, tartype, category):
"""
初始化函數(shù):接收頁碼數(shù)、總數(shù)據(jù)數(shù),計(jì)算總頁碼數(shù)并過濾錯(cuò)誤頁碼數(shù)據(jù)
:param page_num: 頁碼數(shù)
:param total_count: 總數(shù)據(jù)數(shù)
:param tartype: 分類值
:param category: 所屬分類ID
"""
self.page_num = page_num
self.total_count = total_count
self.tartype = tartype
self.total_page, m = divmod(self.total_count, self.per_page) # 總頁碼數(shù),余數(shù)為m
if category:
self.category = category
if m:
self.total_page += 1
if self.total_page < self.max_page:
self.max_page = self.total_page
self.half_page = self.max_page // 2
# 過濾錯(cuò)誤get數(shù)據(jù)
if self.page_num > self.total_page:
self.page_num = self.total_page
elif self.page_num < 1:
self.page_num = 1
def data_start(self):
return (self.page_num - 1) * self.per_page
def data_end(self):
return self.page_num * self.per_page
def page_html(self):
# 計(jì)算頁數(shù)選項(xiàng)
page_start = self.page_num - self.half_page
page_end = self.page_num + self.half_page
if page_start <= 1:
page_start = 1
page_end = self.max_page
if page_end >= self.total_page:
page_end = self.total_page
page_start = self.total_page - self.max_page + 1
# 計(jì)算上一頁下一頁選項(xiàng)
if self.page_num == 1:
last_page = self.page_num
next_page = self.page_num + 1
else:
if self.page_num == self.total_page:
last_page = self.page_num - 1
next_page = self.page_num
else:
last_page = self.page_num - 1
next_page = self.page_num + 1
print(self.category)
html_str_list = []
html_str_list.append('<li><a href="/{}/?page={}{}" >«</a></li>'.format(self.tartype, last_page, self.category))
for i in range(page_start, page_end + 1):
if i == self.page_num:
tmp = '<li><a class="active" href="/{}/?page={}{}" >{}</a></li>'.format(self.tartype, i, self.category, i)
html_str_list.append(tmp)
continue
tmp = '<li><a href="/{}/?page={}{}" >{}</a></li>'.format(self.tartype, i, self.category, i)
html_str_list.append(tmp)
html_str_list.append('<li><a href="/{}/?page={}{}" >»</a></li>'.format(self.tartype, next_page, self.category))
page_html = "".join(html_str_list)
return page_html
通過修改per_page、max_page控制每頁展示的文章數(shù)和分頁模塊展示的最大頁碼數(shù)。
實(shí)現(xiàn)思路:創(chuàng)建page類對象,傳入?yún)?shù)為page_num(當(dāng)前頁碼數(shù))、total_count(總文章數(shù))、tartype(分類值)、category(所屬分類ID)【注:tartpe用于區(qū)分index頁還是category頁,category為查詢的分類ID,index頁時(shí)值為空。可以根據(jù)自己要實(shí)現(xiàn)的功能進(jìn)行修改】構(gòu)造函數(shù)會(huì)計(jì)算出總頁碼數(shù)并過濾掉錯(cuò)誤數(shù)據(jù)。需要實(shí)現(xiàn)某功能是直接調(diào)用類方法即可。
類方法:data_start()計(jì)算出當(dāng)前頁的文章的起始索引值
data_end()計(jì)算出當(dāng)前頁的文章的起始索引值
page_html()返回分頁模塊的html代碼,可直接render到前端。
實(shí)現(xiàn)效果:
文章較少時(shí):

文章較多時(shí):

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python高級(jí)架構(gòu)模式知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家整理了一篇關(guān)于Python高級(jí)架構(gòu)模式知識(shí)點(diǎn)總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。2021-08-08
Python實(shí)現(xiàn)DBSCAN聚類算法并樣例測試
聚類是一種機(jī)器學(xué)習(xí)技術(shù),它涉及到數(shù)據(jù)點(diǎn)的分組,聚類是一種無監(jiān)督學(xué)習(xí)的方法,是許多領(lǐng)域中常用的統(tǒng)計(jì)數(shù)據(jù)分析技術(shù)。本文給大家分享Python實(shí)現(xiàn)DBSCAN聚類算法并樣例測試,感興趣的朋友一起看看吧2021-06-06
對Python 2.7 pandas 中的read_excel詳解
今天小編就為大家分享一篇對Python 2.7 pandas 中的read_excel詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05
基于Python實(shí)現(xiàn)在線加密解密網(wǎng)站系統(tǒng)
在這個(gè)數(shù)字化時(shí)代,數(shù)據(jù)的安全和隱私變得越來越重要,所以本文小編就來帶大家實(shí)現(xiàn)一個(gè)簡單但功能強(qiáng)大的加密解密系統(tǒng),并深入探討它是如何工作的,有興趣的可以了解下2023-09-09

