分頁功能在每個網站都是必要的,對于分頁來說,其實就是根據用戶的輸入計算出應該顯示在頁面上的數據在數據庫表中的起始位置。
確定分頁需求:
1. 每頁顯示的數據條數
2. 每頁顯示頁號鏈接數
3. 上一頁和下一頁
4. 首頁和末頁
效果圖:

首先,利用django內置的分頁功能,寫分頁類:
from django.core.paginator import Paginator, Page # 導入django分頁模塊class PageInfo(object): def __init__(self, current_page, all_count, base_url, per_page=10, show_page=11): """ :param current_page: 當前頁 :param all_count: 總頁數 :param base_url: 模板 :param per_page: 每頁顯示數據條數 :param show_page: 顯示鏈接頁個數 """ #若url錯誤,默認顯示第一頁(錯誤類型可能為:空頁面編號,非整數型頁面編號) try: self.current_page = int(current_page) except Exception as e: self.current_page = 1 #根據數據庫信息條數得出總頁數 a, b = divmod(all_count, per_page) if b: a += 1 self.all_page = a self.base_url = base_url self.per_page = per_page self.show_page = show_page #當前頁起始數據id def start_data(self): return (self.current_page - 1) * self.per_page #當前頁結束數據id def end_data(self): return self.current_page * self.per_page #動態生成前端html def pager(self): page_list = [] half = int((self.show_page - 1)/2) #如果:總頁數 < show_page,默認顯示頁數范圍為: 1~總頁數 if self.all_page < self.show_page: start_page = 1 end_page = self.all_page + 1 #如果:總頁數 > show_page else: #如果:current_page - half <= 0,默認顯示頁數范圍為:1~show_page if self.current_page <= half: start_page = 1 end_page = self.show_page + 1 else: #如果:current_page + half >總頁數,默認顯示頁數范圍為:總頁數 - show_page ~ 總頁數 if self.current_page + half > self.all_page: end_page = self.all_page + 1 start_page = end_page - self.show_page else: start_page = self.current_page - half end_page = self.current_page + half + 1 #首頁 first_page = "<li><a href='%s?page=%s'>首頁</a></li>" %(self.base_url, 1) page_list.append(first_page) #上一頁(若當前頁等于第一頁,則上一頁無鏈接,否則鏈接為當前頁減1) if self.current_page <= 1: prev_page = "<li><a href='#'>上一頁</a></li>" else: prev_page = "<li><a href='%s?page=%s'>上一頁</a></li>" %(self.base_url, self.current_page-1) page_list.append(prev_page) #動態生成中間頁數鏈接 for i in range(start_page, end_page): if i == self.current_page: temp = "<li class='active'><a href='%s?page=%s'>%s</a></li>" %(self.base_url, i, i) else: temp = "<li><a href='%s?page=%s'>%s</a></li>" % (self.base_url, i, i) page_list.append(temp) #下一頁(若當前頁等于最后頁,則下一頁無鏈接,否則鏈接為當前頁加1) if self.current_page >= self.all_page: next_page = "<li><a href='#'>下一頁</a></li>" else: next_page = "<li><a href='%s?page=%s'>下一頁</a></li>" %(self.base_url, self.current_page+1) page_list.append(next_page) #末頁(若總頁數只有一頁,則無末頁標簽) if self.all_page > 1: last_page = "<li><a href='%s?page=%s'>末頁</a></li>" % (self.base_url, self.all_page) page_list.append(last_page) return ''.join(page_list)
新聞熱點
疑難解答