Django【第11篇】:Django之分页升级版本(组件)
分页组件
一、分页的实现与使用

- class Pagination(object):
- """
- 自定义分页
- """
- def __init__(self,current_page,total_count,base_url,params,per_page_count=10,max_pager_count=11):
- try:
- current_page = int(current_page)
- except Exception as e:
- current_page = 1
- if current_page <=0:
- current_page = 1
- self.current_page = current_page
- # 数据总条数
- self.total_count = total_count
- # 每页显示10条数据
- self.per_page_count = per_page_count
- # 页面上应该显示的最大页码
- max_page_num, div = divmod(total_count, per_page_count)
- if div:
- max_page_num += 1
- self.max_page_num = max_page_num
- # 页面上默认显示11个页码(当前页在中间)
- self.max_pager_count = max_pager_count
- self.half_max_pager_count = int((max_pager_count - 1) / 2)
- # URL前缀
- self.base_url = base_url
- # request.GET
- import copy
- params = copy.deepcopy(params)
- params._mutable = True
- # 包含当前列表页面所有的搜索条件
- # {source:[2,], status:[2], gender:[2],consultant:[1],page:[1]}
- # self.params[page] = 8
- # self.params.urlencode()
- # source=2&status=2&gender=2&consultant=1&page=8
- # href="/hosts/?source=2&status=2&gender=2&consultant=1&page=8"
- # href="%s?%s" %(self.base_url,self.params.urlencode())
- self.params = params
- @property
- def start(self):
- return (self.current_page - 1) * self.per_page_count
- @property
- def end(self):
- return self.current_page * self.per_page_count
- def page_html(self):
- # 如果总页数 <= 11
- if self.max_page_num <= self.max_pager_count:
- pager_start = 1
- pager_end = self.max_page_num
- # 如果总页数 > 11
- else:
- # 如果当前页 <= 5
- if self.current_page <= self.half_max_pager_count:
- pager_start = 1
- pager_end = self.max_pager_count
- else:
- # 当前页 + 5 > 总页码
- if (self.current_page + self.half_max_pager_count) > self.max_page_num:
- pager_end = self.max_page_num
- pager_start = self.max_page_num - self.max_pager_count + 1 #倒这数11个
- else:
- pager_start = self.current_page - self.half_max_pager_count
- pager_end = self.current_page + self.half_max_pager_count
- page_html_list = []
- # {source:[2,], status:[2], gender:[2],consultant:[1],page:[1]}
- # 首页
- self.params['page'] = 1
- first_page = '<li><a href="%s?%s">首页</a></li>' % (self.base_url,self.params.urlencode(),)
- page_html_list.append(first_page)
- # 上一页
- self.params["page"] = self.current_page - 1
- if self.params["page"] < 1:
- pervious_page = '<li class="disabled"><a href="%s?%s" aria-label="Previous">上一页</span></a></li>' % (
- self.base_url, self.params.urlencode())
- else:
- pervious_page = '<li><a href = "%s?%s" aria-label = "Previous" >上一页</span></a></li>' % (
- self.base_url, self.params.urlencode())
- page_html_list.append(pervious_page)
- # 中间页码
- for i in range(pager_start, pager_end + 1):
- self.params['page'] = i
- if 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)
- # 下一页
- self.params["page"] = self.current_page + 1
- if self.params["page"] > self.max_page_num:
- self.params["page"] = self.current_page
- next_page = '<li class="disabled"><a href = "%s?%s" aria-label = "Next">下一页</span></a></li >' % (
- self.base_url, self.params.urlencode())
- else:
- next_page = '<li><a href = "%s?%s" aria-label = "Next">下一页</span></a></li>' % (
- self.base_url, self.params.urlencode())
- page_html_list.append(next_page)
- # 尾页
- self.params['page'] = self.max_page_num
- last_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)

二、使用

- """
- 自定义分页组件的使用方法:
- pager_obj = Pagination(request.GET.get('page',1),len(HOST_LIST),request.path_info,request.GET)
- host_list = HOST_LIST[pager_obj.start:pager_obj.end]
- html = pager_obj.page_html()
- return render(request,'hosts.html',{'host_list':host_list,"page_html":html})
- """

三、批量查数据
- #批量创建数据
- # booklist = []
- # for i in range(100):
- # booklist.append(models.Book(name="book" + str(i), price=20 + i * i))
- #
- # models.Book.objects.bulk_create(booklist)
Django【第11篇】:Django之分页升级版本(组件)的更多相关文章
- Django框架第九篇--Django和Ajax、序列化组件(serializers)、自定义分页器、模型表choice参数
Django和Ajax 一.什么是Ajax AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步的Javascript和XML”.即使用Javascript语 ...
- Django基础-04篇 Django开发前后端联动
1. 写views views.py代码块 1.在前端以/article/{{ article.id }}这种方式请求后台, 参数配置在urls.py中path('category/<int:i ...
- Django基础06篇 分页
1.导入Django自带的分页类 from django.core.paginator import Paginator 2.分页类的使用 def index(request): # return H ...
- Python之路【第十七篇】:Django【进阶篇 】
Python之路[第十七篇]:Django[进阶篇 ] Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接 ...
- Python之路【第十七篇】:Django【进阶篇】
Python之路[第十七篇]:Django[进阶篇 ] Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接 ...
- Django【进阶篇】
目录 一.Model 二.admin 三.Form组件 四.Cookie 五.Session 六.分页 七.序列化 一.Model 数据库的配置 1.django默认支持sqlite,mysql, o ...
- Django【进阶篇 】
Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行 ...
- Python之路【第十六篇】:Django【基础篇】
Python之路[第十六篇]:Django[基础篇] Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了O ...
- Python之Django【进阶篇 】
Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行 ...
随机推荐
- kafka window安装与配置
一.安装jdk1.8(此处省略) 二.安装zookeeper1. 下载安装包:http://zookeeper.apache.org/releases.html,解压到指定目录(如下) 2. 在系统变 ...
- CSS-W3School:CSS table-layout 属性
ylbtech-CSS-W3School:CSS table-layout 属性 1.返回顶部 1. CSS table-layout 属性 CSS 参考手册 实例 设置表格布局算法: table { ...
- JS获取select被选中的option的值
一:JavaScript原生的方法 1:拿到select对象: var myselect=document.getElementById(“test”); 2:拿到选中项的索引:var index=m ...
- Mac使用SSH连接远程服务器
1. 终端通过 ssh 连接远程服务器 ssh -p 36622 root@localhost 2. 文件上传下载 上传 scp 下载 scp 3. 客户端 FinalShell(推荐) FileZi ...
- ifram刷新父窗口中内嵌页面
如果C的iframe标签的id是"iframec",那么在B.aspx中你想刷新的代码处写 parent.document.getElementById('iframec').sr ...
- nginx实现域名跳转
server { listen 80; server_name www.dd.com www.tt.com; index index.html index.htm index.php; root /u ...
- windows 10 取消alt+tab的预览功能
1.win+r 输入regedit打开注册表编辑器 2.HKEY_CURRENT_USER/SOFTWARE/Microsoft/Windows/CurrentVersion/Explorer 3. ...
- cocos2dx基础篇(8) 开关按钮CCControlSwitch
[3.x] (1)去掉 “CC” (2)对象类 CCObject 改为 Ref (3)标签类 LabelTTF 改为 Label (4)CCControlEvent 改为强枚举 Control::Ev ...
- LeetCode.860-卖柠檬水找零(Lemonade Change)
这是悦乐书的第331次更新,第355篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第201题(顺位题号是860).在柠檬水摊上,每杯柠檬水的价格为5美元.客户站在队列中向 ...
- 使用itchat完成微信自动回复
import itchat from itchat.content import * # 微信自动回复 @itchat.msg_register([TEXT]) def text_reply(msg) ...