page_data.py
from django.utils.safestring import mark_safe from copy import deepcopy class PageData: def __init__(self,request,queryset,page_size=1,page_num=3,page_param='page'): ''' request:请求 queryset:数据表的查询结果 pagesize:一页显示多少条数据 page_num:当前页面显示多少个页码 page_param:翻页参数 ''' get_query_dict=deepcopy(request.GET) self.query_dict=get_query_dict self.page_param=page_param page=request.GET.get(page_param,"1") if page.isdecimal(): page=int(page) else: page=1 self.page=page self.start=(page-1)*page_size self.end=page*page_size self.page_queryset = queryset[self.start:self.end] page_count = queryset.count() #一共要显示多少页 page_count, yushu = divmod(page_count, page_size) if yushu: page_count += 1 self.page_count=page_count self.page_num=page_num def page_html(self): # 判断数据表当中的数据总共能否展示7页 if self.page_count <= self.page_num * 2 + 1: start_page = 1 end_page = self.page_count else: # 当前选中的页面小于三 if self.page <= self.page_num: start_page = 1 end_page = 2 * self.page_num + 1 else: # 当前选中的页面,如果是最后三页 if (self.page + self.page_num) > self.page_count: start_page = self.page_count - 2 * self.page_num end_page = self.page_count else: start_page = self.page - self.page_num end_page = self.page + self.page_num # 存放html代码 page_list = [] self.query_dict.setlist(self.page_param,[1]) if self.page==1: #首页 #上一页 page_list.append(f'<li class="disabled"><a href="?{self.query_dict.urlencode()}">首页</a></li>') page_list.append(f'<li class="disabled"><a href="?{self.query_dict.urlencode()}">上一页</a></li>') else: self.query_dict.setlist(self.page_param, [1]) page_list.append(f'<li><a class="page-first" href="?{self.query_dict.urlencode()}">首页</a></li>') self.query_dict.setlist(self.page_param, [self.page - 1]) page_list.append(f'<li><a href="?{self.query_dict.urlencode()}">上一页</a></li>') #页码 # 定义开始和结束页 for page_num_ye in range(start_page, end_page + 1): if page_num_ye==self.page: self.query_dict.setlist(self.page_param, [page_num_ye]) page_list.append(f'<li class="active"><a href="?{self.query_dict.urlencode()}">{page_num_ye}</a></li>') else: self.query_dict.setlist(self.page_param, [page_num_ye]) page_list.append(f'<li><a href="?{self.query_dict.urlencode()}">{page_num_ye}</a></li>') if self.page < self.page_count: self.query_dict.setlist(self.page_param, [self.page +1]) page_list.append(f'<li><a href="?{self.query_dict.urlencode()}">下一页</a></li>') self.query_dict.setlist(self.page_param, [self.page_count]) page_list.append(f'<li><a class="page-first" href="?{self.query_dict.urlencode()}">尾页</a></li>') #下一页 #尾页 else: page_list.append(f'<li class="disabled"><a href="?{self.query_dict.urlencode()}">下一页</a></li>') page_list.append(f'<li class="disabled"><a href="?{self.query_dict.urlencode()}">尾页</a></li>') #跳转 # 跳转页 search_page = f""" <li class="page-jump"> <form method="get" class="form-inline"> <input type="number" name="{self.page_param}" min="1" value="{self.page}" placeholder="页码" class="form-control"> <button type="submit">跳转</button> </form> </li> """ page_list.append(search_page) # 将字符串传递给前端页面 page_str = mark_safe(''.join(page_list)) return page_strviews中引用
from utils_app.utils.page_data import PageData #方法中 userlist = models.UserInfo.objects.filter(**data_dict) data =PageData(request,userlist) content = { 'userlist':data.page_queryset, 'page_str':data.page_html() } return render(request, "admin/admin.html",content)