DJANGO 自定義分頁組件
阿新 • • 發佈:2018-08-27
ret ref 前端 nav exce open 分享圖片 pro paginati
第一次在碼雲上面分享代碼片段,記錄一下:
https://gitee.com/trunkslisa/codes/14gkxi3zf9e2ulbvjnqyo90
class Pagination(object): def __init__(self, totalCount, currentPage, perPageNum=20, maxPageNum=7): # 傳入: # -所有數據的個數 totalCount self.totalCount = totalCount # -當前頁 currentPage通過自定制的py文件,今後可以方便的引用分頁組件try: v = int(currentPage) if v < 0: v = 1 self.currentPage = v except Exception as e: self.currentPage = 1 # -每頁顯示??行 perPageNum self.perPageNum = perPageNum # -最多顯示??頁 maxPageNum self.maxPageNum = maxPageNum# 開始條數 def start(self): return (self.currentPage - 1) * self.perPageNum # 結束條數 def end(self): return self.currentPage * self.perPageNum # 總頁數 # 采用這個裝飾器以後,本來需要用self.num_pages()這個方法的,後面的括號可以不用寫了 @property def num_pages(self): # 取余數,不等於0的+1 a, b = divmod(self.totalCount, self.perPageNum)if b == 0: return a return a+1 # 根據情況生成相應的頁碼list def pager_num_range(self): # range應該根據當前頁動態生成,自定制顯示數量 # 代指當前頁 #self.current_page # 最多顯示的頁碼數量 #self.per_page_num # 總頁數 #self.num_pages # 判斷一下傳入的頁碼是否大於總頁數 if self.currentPage > self.num_pages: self.currentPage = self.num_pages # 總頁數小於當前頁 if self.num_pages < self.currentPage: return range(1, self.num_pages+1) # 總頁數有很多 part = int(self.maxPageNum/2) #拿到顯示總數量的一半 if self.currentPage <= part: return range(1, self.maxPageNum+1) # 判斷當前頁+part大於最後一頁,顯示最後一頁至最後一頁往前的per_pager_num的數量+1 if (self.currentPage + part) > self.num_pages: return range(self.num_pages - self.maxPageNum + 1, self.num_pages+1) return range(self.currentPage - part, self.currentPage + part + 1) def page_str(self): page_list = [] #首頁 first = ‘<li><a href="/index3.html?p=1">首頁</a></li>‘ page_list.append(first) #增加上一頁 if self.currentPage == 1: prev = ‘<li><a href="#">上一頁</a></li>‘ else: prev = ‘<li><a href="/index3.html?p=%s">上一頁</a></li>‘ % (self.currentPage - 1) page_list.append(prev) #增加頁碼 for i in self.pager_num_range(): #給當前頁做特殊標識 if i == self.currentPage: temp = ‘<li class="active"><a>%s</a></li>‘ %(i) else: temp = ‘<li><a href="/index3.html?p=%s">%s</a></li>‘ %(i,i) page_list.append(temp) #增加下一頁 if self.currentPage >= self.num_pages: nex = ‘<li><a href="#">下一頁</a></li>‘ else: nex = ‘<li><a href="/index3.html?p=%s">下一頁</a></li>‘ %(self.currentPage + 1) page_list.append(nex) #增加尾頁 last = ‘<li><a href="/index3.html?p=%s">尾頁</a></li>‘ %(self.num_pages) page_list.append(last) return ‘‘.join(page_list)
from app01.pager import Pagination from django.shortcuts import render from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger USER_LIST = [] for i in range(1, 666): temp = {‘name‘: ‘root‘ + str(i), ‘age‘: i} USER_LIST.append(temp) def index(request): current_Page = request.GET.get(‘p‘) #這裏的666是個模擬數據,實際使用中應用實際數量替換該位置 page_obj = Pagination(666, current_Page) #這裏的USER_LIST是自己創建的模擬數據,主要為頁面展示使用 data_list = USER_LIST[page_obj.start():page_obj.end()] return render(request, ‘index3.html‘, {‘data‘: data_list, ‘page_obj‘: page_obj})分頁組件引用方式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="/static/plugins/bootstrap/css/bootstrap.css"> </head> <body> <ul> {% for row in data %} <li>{{ row.name}}-{{ row.age }}</li> {% endfor %} </ul> <nav aria-label="..."> <ul class="pagination pagination-sm"> {{ page_obj.page_str|safe }} </ul> </nav> </body> </html>分頁前端展示,引入了bootstarp模塊進行了美化
DJANGO 自定義分頁組件