python-自定义分页组件
"""
自定义分页组件的使用方法:
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})
"""
class Pagination(object):
def __init__(self, current_page, totalCount, base_url,parmas, per_page_count=10, max_page_count=11):
try:
current_page = int(current_page)
except:
current_page = 1
if current_page < 1:
current_page = 1
# 当前页
self.current_page = current_page
# 总记录数/总条数
self.totalCount = totalCount
# 每页显示的数量
self.per_page_count = per_page_count max_page_num, v = divmod(totalCount, per_page_count)
if v:
max_page_num += 1 # 总页数
self.max_page_num = max_page_num
# 显示页码的个数
# 页面上默认显示11个页面(当前页在中间)
self.max_page_count = max_page_count self.half_page_count = int((self.max_page_count - 1) / 2)
# URL前缀
self.base_url = base_url import copy
parmas=copy.deepcopy(parmas)
print(parmas,'------******')
self.parmas=parmas
# 每页开始的记录
@property
def start(self):
return (self.current_page - 1) * self.per_page_count # 每页结束的记录
@property
def end(self):
return self.per_page_count * self.current_page # 页码显示
def page_html(self): if self.max_page_num < self.max_page_count:
page_start = 1
page_end = self.max_page_num
else:
if self.current_page < self.half_page_count:
page_start = 1
page_end = self.max_page_count else:
if (self.current_page + self.half_page_count) > self.max_page_num:
page_start = self.max_page_num - self.max_page_count + 1
page_end = self.max_page_num else:
page_start = self.current_page - self.half_page_count
page_end = self.current_page + self.half_page_count html_list = []
# 首页
self.parmas['page'] = 1
first_page = '<li><a href="%s?%s">首页</a></li>' % (self.base_url,self.parmas.urlencode())
html_list.append(first_page) # 上一页 if self.current_page == 1:
pre_page='<li class="disabled"><a href="#" aria-label="Previous" ><span aria-hidden="true">«</span></a></li>'
#pre_page = "<a href='%s?%s' >上一页</a>" % (self.base_url, self.parmas.urlencode())
else:
self.parmas['page'] =self.current_page-1
#pre_page = "<a href='%s?%s'>上一页</a>" % (self.base_url, self.parmas.urlencode())
pre_page = '<li><a href="%s?%s" aria-label="Previous"><span aria-hidden="true"> « </span></a> </li>'%(
self.base_url, self.parmas.urlencode())
html_list.append(pre_page) for i in range(page_start, page_end + 1):
self.parmas['page'] =i
if i == self.current_page:
#tmp = "<a href='%s?%s' class='active'>%s</a>" % (self.base_url, self.parmas.urlencode(), i)
tmp='<li class="active"><a href="%s?%s" >%s</a></li>'%(self.base_url, self.parmas.urlencode(), i)
else:
tmp='<li><a href="%s?%s" >%s</a></li>'%(self.base_url, self.parmas.urlencode(), i) html_list.append(tmp) # 下一页
if self.current_page == self.max_page_num: #next_page = "<a href='%s?%s'>下一页</a>" % (self.base_url, self.parmas.urlencode())
next_page='<li class="disabled"><a aria-label="Next" ><span aria-hidden="true">»</span></a></li>'
else:
self.parmas['page']=self.current_page+1
#next_page = "<a href='%s?%s'>下一页</a>" % (self.base_url,self.parmas.urlencode())
next_page= next_page='<li><a href="%s?%s" aria-label="Next" disabled="disabled"><span aria-hidden="true">»</span></a></li>'% (self.base_url,self.parmas.urlencode()) html_list.append(next_page) self.parmas['page']=self.max_page_num
last_url = "<li><a href='%s?%s'>尾页</a></li>" % (self.base_url, self.parmas.urlencode())
html_list.append(last_url)
return ''.join(html_list)
pager
python-自定义分页组件的更多相关文章
- Python自定义分页组件
为了防止XSS即跨站脚本攻击,需要加上 safe # 路由 from django.conf.urls import url from django.contrib import admin from ...
- 基于 Python 的自定义分页组件
基于 Python 的自定义分页组件 分页是网页中经常用到的地方,所以将分页功能分出来,作为一个组件可以方便地使用. 分页实际上就是不同的 url ,通过这些 url 获取不同的数据. 业务逻辑简介 ...
- Django框架---- 自定义分页组件
分页的实现与使用 class Pagination(object): """ 自定义分页 """ def __init__(self,cur ...
- Angular4.+ ngx-bootstrap Pagination 自定义分页组件
Angular4 随笔(二) ——自定义分页组件 1.简介 本组件主要是实现了分页组件显示功能,通过使用 ngx-bootstrap Pagination分页组件实现. 基本逻辑: 1.创建一个分页 ...
- vue 自定义分页组件
vue2.5自定义分页组件,可设置每页显示条数,带跳转框直接跳转到相应页面 Pagination.vue 效果如下图: all: small(只显示数字和上一页和下一页): html <temp ...
- python web 分页组件
闲来无事便写了一个易使用,易移植的Python Web分页组件.使用的技术栈是Python.Django.Bootstrap. 既然是易使用.易移植的组件,首先介绍一下其在django框架中的调用方式 ...
- vue自定义分页组件---切图网
vue2.5自定义分页组件 Pagination.vue,可设置每页显示条数,带跳转框直接跳转到相应页面,亲测有用.目前很多框架自带有分页组件比如elementUI,不过在面对一个拿到PSD稿,然后重 ...
- angular自定义分页组件(实用)
功能描述:分页,点击按钮或者下一页获取分页接口,同时active到对应页码. html模块: <page page-count="totalPage" on-click-pa ...
- Flex4 自定义分页组件
自己写的Flex4分页组件,去伪存真,只实现基本的分页功能,数据过滤神马的都不应该是分页组件干的活,有呆毛才有真相: [源代码下载] Flex自从转手给Apache后人气急跌,本人也很捉鸡,尽管Apa ...
- jquery ajax自定义分页组件(jquery.loehpagerv1.0)原创
简单的两个步骤截可调用 <script src="<%=basePath%>/resources/js/jquery-1.7.1.min.js"></ ...
随机推荐
- 树莓派putty远程登录windows
刚买树莓派的你,还在为要不要购买昂贵的屏幕而纠结吗?看完本博客学会远程登录,妈妈再也不用担心我的学习... 首先我们要知道树莓派的官方推荐系统是raspbian 很建议安装16年9月份的,其他的总是这 ...
- 从源码安装opencv
操作系统为Debian9,由于使用apt-get安装在/usr/lib目录下的opencv可能会造成一些项目上的头文件错误问题,所以选择了从源码安装. 选择opencv3.4.1, 进入https:/ ...
- 通过 systemctl 设置自定义 Service
如果要在Linux 上设置一个开机自启,出现问题自动重启,并且有良好日志的程序,比较流行的方法有 supervisord.systemd,除此之外,还有 upstart.runit 等类似的工具. 但 ...
- 《学习OpenCV》课后习题解答8
题目:(P126) 本章完整讲述了基本的输入/输出编程以及OpenCV的数据结构.下面的练习是基于前面的知识做一些应用,为后面大程序的实现提供帮助. a.创建一个程序实现以下功能:(1)从视频文件中读 ...
- eclipse安装问题
eclipse安装之前需要安装JDK. 注意:eclipse和JDK需要一致,如都是64位或者都是32位. 不然会报错.
- 并发(三) CountDownLatch
CountDownLatch 和CyclicBarrier的区别是,CyclicBarrier可以循环使用,CountDownLatch不可以:CyclicBarrier可以有一个Runnable参数 ...
- Hibernate基本演示
保存一个对象到数据库中 目录结构 hibernate.cfg.xml <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hi ...
- 计蒜客16492 building(二分线段树/分块)
题解: 考虑用线段树维护楼的最大值,然后这个问题就很简单了. 每次可以向左二分出比x高的第一个楼a,同理也可以向右二分出另一个楼b,如果a,b都存在,答案就是b-a-1. 注意到二分是可以直接在线段树 ...
- [洛谷P1420]最长连号
题目大意:输入$n$个正整数,($1\leq n\leq 10000$),要求输出最长的连号的长度.(连号指从小到大连续自然数) 题解:考虑从小到大连续自然数差分为$1$,所以可以把原数列差分(后缀自 ...
- Android逆向之旅---爆破一款资讯类应用「最右」防抓包策略原理分析
一.逆向分析 首先感谢王同学提供的样本,因为王同学那天找到我咨询我说有一个应用Fiddler抓包失败,其实对于这类问题,我一般都会这么回答:第一你是否安装Fiddler证书了,他说他安装了.第二你是否 ...