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"></ ...
随机推荐
- ES5新增数组方法(2):map
通过指定函数处理数组的每个元素,并返回处理后的数组. 1.计算数组中每个元素的平方 let arr = [1, 2, 3, 4, 5, 6]; let newArr = arr.map(item =& ...
- deepin linux 安装/启动jeakins报错:处理
ERROR: No Java executable found in current PATH: /bin:/usr/bin:/sbin:/usr/sbin 安装报错: 1.如还未安装java,则安装 ...
- 问题 A: 完数
问题 A: 完数 时间限制: 1 Sec 内存限制: 32 MB提交: 252 解决: 178[提交][状态][讨论版][命题人:外部导入] 题目描述 求1-n内的完数,所谓的完数是这样的数,它的 ...
- 机器学习 (二) 多变量线性回归 Linear Regression with Multiple Variables
文章内容均来自斯坦福大学的Andrew Ng教授讲解的Machine Learning课程,本文是针对该课程的个人学习笔记,如有疏漏,请以原课程所讲述内容为准.感谢博主Rachel Zhang 的个人 ...
- throw er; // Unhandled 'error' event&Error: ENOENT: no such file or directory,
今天做一个文件上传的项目时, 用express-formidable往硬盘里面存文件时, 报 ENOENT:no such file or directory 原因就是程序不能像别的语言一样不存在就 ...
- android多点触控自由对图片缩放
在系统的相册中,观看相片就可以用多个手指进行缩放. 要实现这个功能,只需要这几步: 1.新建项目,在项目中新建一个ZoomImage.java public class ZoomImageView e ...
- lintcode-130-堆化
130-堆化 给出一个整数数组,堆化操作就是把它变成一个最小堆数组. 对于堆数组A,A[0]是堆的根,并对于每个A[i],A [i * 2 + 1]是A[i]的左儿子并且A[i * 2 + 2]是A[ ...
- windows apache启动报错
Windows启动Apache时报错 he requested operation has failed 有可能80端口被占或者项目路径不存在等 首先找到问题原因 cmd--命令端--切换到apach ...
- 使用 Redis的SETNX命令实现分布式锁
使用Redis的 SETNX 命令可以实现分布式锁,下文介绍其实现方法. SETNX命令简介 命令格式 SETNX key value 将 key 的值设为 value,当且仅当 key 不存在. 若 ...
- 每个分组函数相当于一个for循环 将集合的变量不断遍历
每个分组函数相当于一个for循环 将集合的变量不断遍历