Django的分页器(paginator)

总之不太好用我们还是用自己的好一些

自定义分页器

分页实现源码

"""
自定义分页组件
"""class Pagination(object):def __init__(self, current_page, all_count, base_url, params, per_page_num=8, pager_count=11, ):"""封装分页相关数据:param current_page: 当前页:param all_count:    数据库中的数据总条数:param base_url: 分页中显示的URL前缀:param params:  request.get 对象:param per_page_num: 每页显示的数据条数:param pager_count:  最多显示的页码个数"""try:current_page = int(current_page)except Exception as e:current_page = 1if current_page < 1:current_page = 1self.current_page = current_pageself.all_count = all_countself.per_page_num = per_page_numself.base_url = base_urlall_pager, tmp = divmod(all_count, per_page_num)if tmp:all_pager += 1self.all_pager = all_pagerself.pager_count = pager_countself.pager_count_half = int((pager_count - 1) / 2)import copyparams = copy.deepcopy(params)params._mutable = Trueself.params = params  # self.params : {"page":77,"title":"python","nid":1}
@propertydef start(self):return (self.current_page - 1) * self.per_page_num@propertydef end(self):return self.current_page * self.per_page_numdef page_html(self):# 如果总页码 < 11个:if self.all_pager <= self.pager_count:pager_start = 1pager_end = self.all_pager + 1# 总页码  > 11else:# 当前页如果<=页面上最多显示(11-1)/2个页码if self.current_page <= self.pager_count_half:pager_start = 1pager_end = self.pager_count + 1# 当前页大于5else:# 页码翻到最后if (self.current_page + self.pager_count_half) > self.all_pager:pager_start = self.all_pager - self.pager_count + 1pager_end = self.all_pager + 1else:pager_start = self.current_page - self.pager_count_halfpager_end = self.current_page + self.pager_count_half + 1page_html_list = []self.params["page"] = 1first_page = '<li><a href="%s?%s">首页</a></li>' % (self.base_url, self.params.urlencode(),)page_html_list.append(first_page)if self.current_page <= 1:prev_page = '<li class="disabled"><a href="#">上一页</a></li>'else:self.params["page"] = self.current_page - 1prev_page = '<li><a href="%s?%s">上一页</a></li>' % (self.base_url, self.params.urlencode(),)page_html_list.append(prev_page)for i in range(pager_start, pager_end):self.params["page"] = iif i == self.current_page:temp = '<li class="active"><a href="%s?%s">%s</a></li>' % (self.base_url, self.params.urlencode(), i,)else:temp = '<li><a href="%s?%s">%s</a></li>' % (self.base_url, self.params.urlencode(), i,)page_html_list.append(temp)if self.current_page >= self.all_pager:next_page = '<li class="disabled"><a href="#">下一页</a></li>'else:self.params["page"] = self.current_page + 1next_page = '<li><a href="%s?%s">下一页</a></li>' % (self.base_url, self.params.urlencode(),)page_html_list.append(next_page)self.params["page"] = self.all_pagerlast_page = '<li><a href="%s?%s">尾页</a></li>' % (self.base_url, self.params.urlencode(),)page_html_list.append(last_page)return ''.join(page_html_list)

page.py

视图函数调用

from django.shortcuts import render,HttpResponse# Create your views here.from .models import *def index(request):'''book_list=[]for  i in range(500):book_obj=Book(title="book_%s"%i,price=i*i)book_list.append(book_obj)Book.objects.bulk_create(book_list)'''current_page = request.GET.get("page", 1)all_count = Book.objects.all().count()base_url = request.path  # /index/from app01.utils.page import Paginationpagination = Pagination(int(current_page),all_count,base_url,request.GET, per_page_num=8, pager_count=11,)# def __init__(self, current_page, all_count, base_url, params, per_page_num=8, pager_count=11, ):book_list = Book.objects.all()[pagination.start:pagination.end]from django.http.request import QueryDict# dic = QueryDict(mutable=True)# dic["info"] = 123# print(type(request.GET))# request.GET["info"]=123import copyparams = copy.deepcopy(request.GET)params["xxx"] = 123return render(request, "index.html", locals())

views.py

模板使用展示

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>Title</title><meta name="viewport" content="width=device-width, initial-scale=1"><!-- 最新版本的 Bootstrap 核心 CSS 文件 --><link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css"integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body><ul>{% for foo in book_list %}<li>{{ foo }}</li>{% endfor %}</ul>
<nav><ul class="pagination">{{ pagination.page_html|safe }}</ul>
</nav></body>
</html>

index.html

转载于:https://www.cnblogs.com/shijieli/p/10349567.html

Django 分页组件替换自定义分页相关推荐

  1. Angular 自定义分页组件,自定义每页显示个数

    后端返回列表是全部数据,分页前端做的,自定义分页组件实现前端分页,下图为分页效果: 1.创建page.component.html <nav class="navigation&quo ...

  2. swiper组件如何自定义分页符和前进后退按钮

    前提 今天产品提了这样一个需求:用户在首次登录后,要展示一个引流的轮播图,其内容主要是对新功能的图文说明(类似于王者荣耀每次更新时的内容一览轮播图,如下图所示).如果非首次登录,则让它隐藏掉即可.注: ...

  3. mybatis常见分页技术和自定义分页原理实战

    文章目录 前言 mybatis简单了解 分页类型 分页方式 1.数组分页 2.数据库分页 3.Rowbounds分页 4.自定义插件分页 自定义分页原理 自定义分页实战 聊下第三方分页插件 pageH ...

  4. django Cookie,Session和自定义分页

    因为HTTP协议是无状态的,每发送完请求后都会断开链接,所以有时为了保存 状态用到cookie和session cookie 是保存在浏览器上的,session是保存在后台的 cookie相当于一个口 ...

  5. java自定义分页标签_自定义分页标签--仿javaeye分页效果

    效果如图: 1.JSP规范1.1版本后增加了自定义标签库.实现自定义标签的步骤 (1)开发自定义标签处理类. (2)建立*.tld文件. (3)在web.xml中增加自定义标签的定义. (4)在jsp ...

  6. 杰奇采集分页 php,杰奇自定义分页代码,教程及案例

    在杰奇仿站的时候,分页区域的修改是不可避免的问题,但是基本上一开始完全就搞不懂修改分页的位置在哪里,而确实杰奇没有给出自定义的地方,相关的位置也是完全加密的.不过好不容易找到目录再解密之后,试了几下倒 ...

  7. 【vue分页功能】vue element 分页组件简简单单实现分页功能详细教学

    文章目录 vue分页功能实现 一.直接上代码 二.需要注意的事项 vue分页功能实现 一.直接上代码 // 列表结构 // 重点:data="pageList" <el-ta ...

  8. Vue.js分页组件实现:diVuePagination

    为什么80%的码农都做不了架构师?>>>    完整版下载地址:https://gitee.com/dgx/diVuePagination 完整版演示地址:http://dgx.gi ...

  9. vue 手动挂载组件 手动销毁组件_javascript原生手动分页组件

    上班第二天,好心烦,因为昨天情人节没情人吧~~~ 朋友圈都在虐狗,不刷了,老娘玩知乎去. 我不是天使:javascript原生自定义轮播图组件​zhuanlan.zhihu.com 我不是天使:jav ...

最新文章

  1. JAVA byte[] String
  2. leetcoder reverse polish notation解题笔记
  3. PAT甲级1068 Find More Coins (30 分):[C++题解]DP、背包问题、dp输出方案
  4. html实现ppt缩放效果,Powerpoint 2016缩放功能详解(附案例)
  5. CCIE-LAB-第八篇-OSPF前缀压制+MTU+路由汇总
  6. 如何腾出计算机内存,教你如何正确腾出手机内存,尤其是生活在易门的你,必学!...
  7. java的constructor怎么用,constructor函数 Java中的构造函数Constructor怎么用
  8. LINUX C# 加载本地库的范例代码
  9. 【NLP】一文了解词性标注CRF模型
  10. 让MDK5开发51单片机
  11. python整数转换成英文表示
  12. ajax 发送 put 请求
  13. 安卓应用移植鸿蒙(五):发布鸿蒙自定义组件(har包)到MavenCenter全过程,采坑无数
  14. [敏捷开发培训] Scrum 和 Kanban
  15. 厨神之路三--自制饮品
  16. 复制html代码怎么粘贴快捷键,电脑复制粘贴快捷键,教您电脑怎么用键盘复制粘贴...
  17. 社区版pycharm官网下载安装教程
  18. ARM学习之基本概念
  19. 江南大学C语言大作业,TCPIP大作业基于TCP的网络通信编程C语言版(江南大学).doc...
  20. Android自定义九宫格密码解锁

热门文章

  1. Linux编程(9)_进程
  2. Eclipse如何新建TOMCAT并配置Server Locations和Publishing属性
  3. Java语言所有异常类均继承自_要继承自定义异常类的继承方式必须使用 ( ) 关键字_学小易找答案...
  4. Fiddler安装教程(图文版)
  5. FTP:226 transfer done but failed to open directory
  6. matplotlib.pyplot 中文乱码问题解决
  7. CMS 平台: Drupal, eZ Publish, WordPress, CMS Made Simple 横向比较
  8. java web 部署图片_java web项目 图片资源与部署目录分离,设置服务器的虚拟路径...
  9. 实验三 lr分析器的设计与实现_实验室规划设计趋势之一灵活性|无风管通风柜的灵活性是如何实现的?...
  10. php获取当天 天气预报,PHP获取当天和72小时天气预报,并生成接口