分页处理脚本:
# -*- coding: utf-8 -*- # @Time : 2019-01-22 10:41 # @Author : 小贰 # @FileName: page.py # @function: 作者比较懒什么都没写 def control(current_page,page_nums): list_size = 5 if page_nums<=list_size: page_list= list(range(1,page_nums+1)) else: if (page_nums-list_size)<=list_size: page_list = list(range(1,page_nums+1)) else: if (page_nums-current_page)<list_size: page_list = [1,2,"..."]+list(range(page_nums - 4, page_nums + 1)) else: if current_page>list_size: page_list = list(range(current_page-4, current_page + 1)) + ["...", page_nums - 1, page_nums] else: page_list = list(range(1, list_size + 1)) + ["...", page_nums - 1, page_nums] return page_list if __name__ == "__main__": current_page=120 page_nums=200 print(control(current_page,page_nums))
视图:
class OpsLog(View): """操作日志""" @method_decorator(csrf_exempt) @method_decorator(login_check) @method_decorator(perms_check) def dispatch(self, request, *args, **kwargs): return super(OpsLog,self).dispatch(request,*args, **kwargs) def get(self,request,page=1): title = "操作日志" audit_obj = log_db.OpsLog.objects.all().order_by("-start_time") pagesize = 13 paginator = Paginator(audit_obj, pagesize) # 从前端获取当前的页码数,默认为1 # 把当前的页码数转换成整数类型 currentPage = int(page) page_nums = paginator.num_pages #获取分页信息 page_list = pg.control(currentPage, page_nums) try: audit_list = paginator.page(page) # 获取当前页码的记录 except PageNotAnInteger: audit_list = paginator.page(1) # 如果用户输入的页码不是整数时,显示第1页的内容 except EmptyPage: audit_list = paginator.page(paginator.num_pages) return render(request,'log_opslog.html',locals())
url配置:
urlpatterns = [ path("opslog/<int:page>/",views.OpsLog.as_view()), ]
模板:
<div class="text-right" style="margin-top:-30px;padding-right:9%"> <ul class="pagination" id="pager"> <li class="previous"><a href="/log/opslog/1/">首页</a></li> {#上一页按钮开始#} {# 如果当前页有上一页#} {% if audit_list.has_previous %} {# 当前页的上一页按钮正常使用#} <li class="previous"><a href="/log/opslog/{{ audit_list.previous_page_number }}/">上一页</a></li> {% else %} {# 当前页的不存在上一页时,上一页的按钮不可用#} <li class="previous disabled"><a href="javascript:;">上一页</a></li> {% endif %} {#上一页按钮结束#} {# 页码开始#} {% for num in page_list %} {% if num == currentPage %} <li class="item active"><a href="/log/opslog/{{ num }}/">{{ num }}</a></li> {% else %} <li class="item"><a href="/log/opslog/{{ num }}/">{{ num }}</a></li> {% endif %} {% endfor %} {#页码结束#} {# 下一页按钮开始#} {% if audit_list.has_next %} <li class="next"><a href="/log/opslog/{{ audit_list.next_page_number }}/">下一页</a></li> {% else %} <li class="next disabled"><a href="javascript:;">下一页</a></li> {% endif %} <li class="previous"><a href="/log/opslog/{{ page_nums }}/">尾页</a></li> {# 下一页按钮结束#} </ul> </div>
效果: