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

文章較多時(shí):

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
在Flask使用TensorFlow的幾個(gè)常見(jiàn)錯(cuò)誤及解決
這篇文章主要介紹了在Flask使用TensorFlow的幾個(gè)常見(jiàn)錯(cuò)誤及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
numpy數(shù)據(jù)類(lèi)型dtype轉(zhuǎn)換實(shí)現(xiàn)
這篇文章主要介紹了numpy數(shù)據(jù)類(lèi)型dtype轉(zhuǎn)換實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
PyTorch中torch.utils.data.Dataset的介紹與實(shí)戰(zhàn)
PyTorch是一個(gè)開(kāi)源的Python機(jī)器學(xué)習(xí)庫(kù),基于Torch,用于自然語(yǔ)言處理等應(yīng)用程序,下面這篇文章主要給大家介紹了關(guān)于PyTorch中torch.utils.data.Dataset的介紹與實(shí)戰(zhàn),需要的朋友可以參考下2022-06-06
python實(shí)現(xiàn)b站直播自動(dòng)發(fā)送彈幕功能
這篇文章主要介紹了python如何實(shí)現(xiàn)b站直播自動(dòng)發(fā)送彈幕,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-02-02
python實(shí)現(xiàn)csdn全部博文下載并轉(zhuǎn)PDF
我們學(xué)習(xí)編程,在學(xué)習(xí)的時(shí)候,會(huì)有想把有用的知識(shí)點(diǎn)保存下來(lái),我們可以把知識(shí)點(diǎn)的內(nèi)容爬下來(lái)轉(zhuǎn)變成pdf格式,方便我們拿手機(jī)可以閑時(shí)翻看,是很方便的,本文就介紹一下如何實(shí)現(xiàn)2021-06-06
OpenCV半小時(shí)掌握基本操作之對(duì)象測(cè)量
這篇文章主要介紹了OpenCV基本操作之對(duì)象測(cè)量,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09
python利用opencv實(shí)現(xiàn)SIFT特征提取與匹配
這篇文章主要為大家詳細(xì)介紹了python利用opencv實(shí)現(xiàn)SIFT特征提取與匹配,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03

