Django實(shí)現(xiàn)基于類的分頁(yè)功能
開發(fā)個(gè)人博客時(shí)往往避免不了分頁(yè)功能的實(shí)現(xiàn),實(shí)現(xiàn)方法大體上分為函數(shù)和類兩種。本文基于類實(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)記該鏈接所屬分類ID,首頁(yè)默認(rèn)為空 def __init__(self, page_num, total_count, tartype, category): """ 初始化函數(shù):接收頁(yè)碼數(shù)、總數(shù)據(jù)數(shù),計(jì)算總頁(yè)碼數(shù)并過濾錯(cuò)誤頁(yè)碼數(shù)據(jù) :param page_num: 頁(yè)碼數(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) # 總頁(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 # 過濾錯(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
通過修改per_page、max_page控制每頁(yè)展示的文章數(shù)和分頁(yè)模塊展示的最大頁(yè)碼數(shù)。
實(shí)現(xiàn)思路:創(chuàng)建page類對(duì)象,傳入?yún)?shù)為page_num(當(dāng)前頁(yè)碼數(shù))、total_count(總文章數(shù))、tartype(分類值)、category(所屬分類ID)【注:tartpe用于區(qū)分index頁(yè)還是category頁(yè),category為查詢的分類ID,index頁(yè)時(shí)值為空??梢愿鶕?jù)自己要實(shí)現(xiàn)的功能進(jìn)行修改】構(gòu)造函數(shù)會(huì)計(jì)算出總頁(yè)碼數(shù)并過濾掉錯(cuò)誤數(shù)據(jù)。需要實(shí)現(xiàn)某功能是直接調(diào)用類方法即可。
類方法: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è)常見錯(cuò)誤及解決
這篇文章主要介紹了在Flask使用TensorFlow的幾個(gè)常見錯(cuò)誤及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01numpy數(shù)據(jù)類型dtype轉(zhuǎn)換實(shí)現(xiàn)
這篇文章主要介紹了numpy數(shù)據(jù)類型dtype轉(zhuǎn)換實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04PyTorch中torch.utils.data.Dataset的介紹與實(shí)戰(zhàn)
PyTorch是一個(gè)開源的Python機(jī)器學(xué)習(xí)庫(kù),基于Torch,用于自然語(yǔ)言處理等應(yīng)用程序,下面這篇文章主要給大家介紹了關(guān)于PyTorch中torch.utils.data.Dataset的介紹與實(shí)戰(zhàn),需要的朋友可以參考下2022-06-06python實(shí)現(xiàn)b站直播自動(dòng)發(fā)送彈幕功能
這篇文章主要介紹了python如何實(shí)現(xiàn)b站直播自動(dòng)發(fā)送彈幕,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-02-02python實(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-06OpenCV半小時(shí)掌握基本操作之對(duì)象測(cè)量
這篇文章主要介紹了OpenCV基本操作之對(duì)象測(cè)量,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09python利用opencv實(shí)現(xiàn)SIFT特征提取與匹配
這篇文章主要為大家詳細(xì)介紹了python利用opencv實(shí)現(xiàn)SIFT特征提取與匹配,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03