page_data.py
python
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_str
views中引用
python
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)