第一次在码云上面分享代码片段,记录一下:
https://gitee.com/trunkslisa/codes/14gkxi3zf9e2ulbvjnqyo90
class Pagination(object): def __init__(self, totalCount, currentPage, perPageNum=20, maxPageNum=7): # 传入: # -所有数据的个数 totalCount self.totalCount = totalCount # -当前页 currentPage 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)
通过自定制的py文件,今后可以方便的引用分页组件
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模块进行了美化
原文地址:https://www.cnblogs.com/trunkslisa/p/9542310.html
时间: 2024-10-09 13:11:37