使用方法
"""
自定义分页组件的使用方法:
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">&laquo;</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"> &laquo; </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">&raquo;</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">&raquo;</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-自定义分页组件的更多相关文章

  1. Python自定义分页组件

    为了防止XSS即跨站脚本攻击,需要加上 safe # 路由 from django.conf.urls import url from django.contrib import admin from ...

  2. 基于 Python 的自定义分页组件

    基于 Python 的自定义分页组件 分页是网页中经常用到的地方,所以将分页功能分出来,作为一个组件可以方便地使用. 分页实际上就是不同的 url ,通过这些 url 获取不同的数据. 业务逻辑简介 ...

  3. Django框架---- 自定义分页组件

    分页的实现与使用 class Pagination(object): """ 自定义分页 """ def __init__(self,cur ...

  4. Angular4.+ ngx-bootstrap Pagination 自定义分页组件

    Angular4 随笔(二)  ——自定义分页组件 1.简介 本组件主要是实现了分页组件显示功能,通过使用 ngx-bootstrap Pagination分页组件实现. 基本逻辑: 1.创建一个分页 ...

  5. vue 自定义分页组件

    vue2.5自定义分页组件,可设置每页显示条数,带跳转框直接跳转到相应页面 Pagination.vue 效果如下图: all: small(只显示数字和上一页和下一页): html <temp ...

  6. python web 分页组件

    闲来无事便写了一个易使用,易移植的Python Web分页组件.使用的技术栈是Python.Django.Bootstrap. 既然是易使用.易移植的组件,首先介绍一下其在django框架中的调用方式 ...

  7. vue自定义分页组件---切图网

    vue2.5自定义分页组件 Pagination.vue,可设置每页显示条数,带跳转框直接跳转到相应页面,亲测有用.目前很多框架自带有分页组件比如elementUI,不过在面对一个拿到PSD稿,然后重 ...

  8. angular自定义分页组件(实用)

    功能描述:分页,点击按钮或者下一页获取分页接口,同时active到对应页码. html模块: <page page-count="totalPage" on-click-pa ...

  9. Flex4 自定义分页组件

    自己写的Flex4分页组件,去伪存真,只实现基本的分页功能,数据过滤神马的都不应该是分页组件干的活,有呆毛才有真相: [源代码下载] Flex自从转手给Apache后人气急跌,本人也很捉鸡,尽管Apa ...

  10. jquery ajax自定义分页组件(jquery.loehpagerv1.0)原创

    简单的两个步骤截可调用 <script src="<%=basePath%>/resources/js/jquery-1.7.1.min.js"></ ...

随机推荐

  1. mysql 处理日期格式

    DATE_FORMAT(createTime,'%Y-%m-%d %H:%i:%s') 对应格式: 2018-12-17 17:33:43 DATE_FORMAT()函数所有格式:   以后有需要在自 ...

  2. 数据库sql命令

    本文为转载,原文地址:http://www.cnblogs.com/cangqiongbingchen/p/4530333.html 1.说明:创建数据库CREATE DATABASE databas ...

  3. Spark搭档Elasticsearch

    Spark与elasticsearch结合使用是一种常用的场景,小编在这里整理了一些Spark与ES结合使用的方法.一. write data to elasticsearch利用elasticsea ...

  4. UVA 1085 House of Cards(对抗搜索)

    Description   Axel and Birgit like to play a card game in which they build a house of cards, gaining ...

  5. identity方式

    identity方式      <generator class="identity"/>identity方式表示数据库的主键生成方式为采用数据库的主键生成机制,例如S ...

  6. Hadoop2.6.0伪分布式搭建

    环境: 1.Ubuntu14.04 首先要在linux系统上新建一个账户,比如就叫做hadoop,用于专门运行hadoop. 2.配置jdk 我是使用的版本是jdk1.8. 解压:创建/usr/jav ...

  7. Spring温故而知新 – bean的装配

    Spring装配机制 Spring提供了三种主要的装配机制: 1:通过XML进行显示配置 2:通过Java代码显示配置 3:自动化装配 自动化装配 Spring中IOC容器分两个步骤来完成自动化装配: ...

  8. 【SSH】——梳理三大框架

    [前言] 去年软考,从System.out.println("Hello World!")开始,小编也算是进入java的世界了.转战java以后,虽然仍旧在学习.NET的知识,但越 ...

  9. 找jar包的网址

    http://search.maven.org/#search%7Cga%7C1%7Cmybatis http://mvnrepository.com/

  10. 【bzoj2705】[SDOI2012]Longge的问题 欧拉函数

    题目描述 Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N). 输入 一个整数,为N. 输出 ...