# coding:utf8
# __author: Administrator
# date: 2018/3/7 0007
# /usr/bin/env python
import tornado.web
from math import ceil LIST_INFO =[
{'username':'ld',"email":'12345@qq.com'},
] class Pagination:
#传入当前页,总条数
def __init__(self,current_page,total_num):
try:
current_page = int(current_page)
except:
current_page = 1
if current_page < 1:
current_page = 1
#总条数
self.total_num=total_num
#默认每页显示内容
self.page_size=5
#默认分页栏显示几页
self.page_show_num=11
#当前页
self.current_page=current_page
#总页数
self.total_page=ceil(total_num/self.page_size)
#当前路径
self.base_url='/index/' #设置当前路径
@property
def set_base_url(self,base_url):
self.base_url=base_url #设置页面显示条数
@property
def set_size(self,page_size):
self.page_size=page_size #设置分页类显示数量
@property
def set_page_show_num(self,page_show_num):
self.page_show_num=page_show_num #设置总页数
@property
def set_total(self,page_total):
self.total_page=page_total #获取分页栏的页数范围,返回列表
def get_list(self):
cur = (self.current_page - 1) * self.page_size
show_page = []
mid_page=int(self.page_show_num/2)
if self.total_page <= self.page_show_num: #检测输入页码的合法性
show_page = range(self.total_page-self.page_show_num, self.total_page + 1)
else:
if self.current_page <= mid_page:
show_page = range(1, self.page_show_num+1)
elif self.current_page + mid_page >= self.total_page:
show_page = range(self.total_page - self.page_show_num +1, self.total_page + 1)
else:
show_page = range(self.current_page - mid_page, self.current_page + mid_page+1)
return show_page #获取当前页,开始条数
@property
def start(self):
return (self.current_page - 1) * 5 #获取当前页结束条数
@property
def end(self):
end_page_num=0
cur_num=(self.current_page-1)*self.page_size
if cur_num+self.page_size > self.total_num:
end_page_num=self.total_num
else:
end_page_num=cur_num+self.page_size
return end_page_num #获取上一页
@property
def pre_page(self):
page_str=''
if self.current_page>1:
page_str = '<a href="%s%s">上一页</a>'%(self.base_url,self.current_page - 1)
return page_str #获取下一页
@property
def next_page(self):
page_str=''
if self.current_page < self.total_page:
page_str = '<a href="%s%s">下一页</a>'%(self.base_url,self.current_page + 1)
return page_str #获取第一页
@property
def first_page(self):
page_str=''
if self.total_page>1 and self.current_page!=1:
page_str='<a href="%s1">首页</a>'%self.base_url
return page_str #获取尾页
@property
def last_page(self):
page_str=''
if self.total_page>1 and self.current_page!=self.total_page:
page_str = '<a href="%s%s">尾页</a>' % (self.base_url,self.total_page)
return page_str #拼接html和javascript进行跳转页面
@property
def go_page(self):
page_str=''
if self.total_page>1:
inp="""<input type='text' /><a onclick="Jump('%s',this)">GO</a>"""%(self.base_url)
script="""
<script>
function Jump(baseUrl,ths){
var v=ths.previousElementSibling.value;
if(v.trim().length>0){
location.href=baseUrl+v;
}
}
</script>
"""
page_str=inp+script
return page_str #返回模板页面所需要显示的html,需要在模板也进行还原, {% raw XXX %}
@property
def page_str(self):
page_list=self.get_list()
page_list_num=[]
page_list_num.append(self.first_page)
page_list_num.append(self.pre_page)
for p in page_list:
if self.current_page==p:
temp="<a href='%s%s' class='cur'>%s</a>"%(self.base_url,p,p)
else:
temp = "<a href='%s%s'>%s</a>" % (self.base_url, p, p)
page_list_num.append(temp)
page_list_num.append(self.next_page)
page_list_num.append(self.last_page)
page_list_num.append(self.go_page)
return ''.join(page_list_num) class IndexHandler(tornado.web.RequestHandler):
#使用分页类
def get(self,page):
total_page = int(ceil(len(LIST_INFO) / 5))
#获取页面分页信息
Page=Pagination(page,len(LIST_INFO)) #传入的page数据是通过url过滤的,只会是数字,为正数,所以上面类中只需要考虑用户输入过大
#获取数据信息
info = LIST_INFO[Page.start:Page.end] self.render('home/index.html', list_info=info, p=int(page), sp=Page.page_str) #原来分页方式,不使分页类,适用性不高
def get2(self,page):
try:
page = int(page)
except:
page=1
if page<1:
page=1
#每页显示5条,page是当前页
total_page = int(ceil(len(LIST_INFO)/5))
cur=(page-1)*5
info=[]
show_page=[]
if cur+5 > len(LIST_INFO):
info = LIST_INFO[cur:]
else:
info = LIST_INFO[cur:cur+5]
if total_page <= 11:
show_page=range(1,total_page+1)
else:
if page <= 5:
show_page=range(1,12)
elif page+5>=total_page:
show_page=range(total_page-10,total_page+1)
else:
show_page=range(page-5,page+6)
self.render('home/index.html',list_info=info,p=page,tp=total_page,sp=show_page) #接收post传递数据
def post(self, page):
user = self.get_argument('username')
email = self.get_argument('email')
temp = {'username':user,'email':email}
LIST_INFO.append(temp)
self.redirect('/index/'+page)

前端模板

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<style>
.page a{
margin-left: 5px;
padding: 5px;
background-color: lawngreen;
}
.page a:hover{
background-color: rebeccapurple;
}
.page .cur{
background-color: gold !important;
}
</style>
<body>
<h1>提交数据</h1>
<form method="post" action="/index/{{p}}">
<input name="username" type="text"/>
<input name="email" type="text"/>
<input type="submit" value="提交"/>
</form>
<h1>显示数据</h1>
<table>
<tr>
<th>用户名</th>
<th>邮箱</th>
</tr>
{% for line in list_info %}
<tr>
<td>{{line['username']}}</td>
<td>{{line['email']}}</td>
</tr>
{% end %}
</table>
<div class="page">
{% raw sp %}
</div>
</body>
</html>

python---自定义分页类的更多相关文章

  1. Django 自定义分页类

    分页类代码: class Page(object): ''' 自定义分页类 可以实现Django ORM数据的的分页展示 输出HTML代码: 使用说明: from utils import mypag ...

  2. Python自定义线程类简单示例

    Python自定义线程类简单示例 这篇文章主要介绍了Python自定义线程类,结合简单实例形式分析Python线程的定义与调用相关操作技巧,需要的朋友可以参考下.具体如下: 一. 代码     # - ...

  3. Python自定义分页组件

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

  4. thinkphp自定义分页类

    先来看下这个分页的样式,没写css,确实丑 什么时候写样式再来上传下css吧...... 就是多一个页面跳转功能 先把这个代码贴一下 <?php namespace Component; cla ...

  5. PHP24 自定义分页类

    分页类的定义 <?php /** * Class MyPage 分页类 * @package core */ class MyPage { private $totalCount; //数据表中 ...

  6. Python 自定义元类的两种写法

    有关元类是什么大家自己搜索了解,我这里写一下实现元类的两种写法 # 自定义元类 #继承type class LowercaseMeta(type): ''' 修改类的属性名称为小写的元类 ''' # ...

  7. php : 自定义分页类

    Page.class.php : <?php namespace Tools; class Page { private $total; //数据表中总记录数 private $listRows ...

  8. python 全栈开发,Day115(urlencode,批量操作,快速搜索,保留原搜索条件,自定义分页,拆分代码)

    今日内容前戏 静态字段和字段 先来看下面一段代码 class Foo: x = 1 # 类变量.静态字段.静态属性 def __init__(self): y = 6 # 实例变量.字段.对象属性 # ...

  9. python---django中自带分页类使用

    请先看在学习tornado时,写的自定义分页类:思路一致: python---自定义分页类 1.基础使用: 后台数据获取: from django.core.paginator import Pagi ...

  10. [ Laravel 5.6 文档 ]laravel数据库操作分页(自定义分页实现和自定义分页样式)

    简介 在其他框架中,分页可能是件非常痛苦的事,Laravel 让这件事变得简单.易于上手.Laravel 的分页器与查询构建器和 Eloquent ORM 集成在一起,并开箱提供方便的.易于使用的.基 ...

随机推荐

  1. TextView设置文字包含中英文时自动换行问题的终极解决方案

    情景,正常TextView中设置文本内容中包含中英文时会造成自动换行的问题,影响界面显示效果,如图: 网上很多解决途径,甚至有多三方框架处理,但是效果并不能达到,最终是要如下代码完美解决,效果图如下: ...

  2. Hacked VisualSVN Server by PHP to allow user change password

    index.php <?php$username = $_SERVER["PHP_AUTH_USER"]; //经过 AuthType Basic 认证的用户名$authed ...

  3. array与List之间相互转化

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/5/28 16:05 # @Author : zhang chao # @Fi ...

  4. 《使用python进行数据分析》

    第一 环境搭建 1. 使用pip安装pandas, numpy, scipy, matplotlib, ipython 注意:首先需要安装venv(不然在下面的安装过程中会提示很多的错误,使用pych ...

  5. 常见的HTTP报头(头参数)

    本内容摘抄自<RESTful WebServices> 中文译本附录C '常见的HTTP报头'. 原文作者:Leonard Ricbardson & Sam Ruby 翻译:徐涵. ...

  6. P2209 [USACO13OPEN]燃油经济性Fuel Economy

    题面 sol:(思想):开一个大根堆和一个小根堆,每次计算到下了一个加油站用掉的油时尽量用小根堆中的元素,且同时删去大根堆中的相应位置的元素,当前加油站如果足够便宜,就可以把大根堆中的元素替换掉: ( ...

  7. [资源]--IOS捷径大全,众多实用小功能

    一.实用工具 1.支付助手3.0(新) (扫一扫.微信扫码.微信收款.支付宝扫码.Apple Pay.AA付款.查快递.蚂蚁森林.蚂蚁庄园.彩票.股票.运动.淘票票.乘车码.生活缴费.火车票等等): ...

  8. BZOJ3237 AHOI2013连通图(线段树分治+并查集)

    把查询看做是在一条时间轴上.那么每条边都有几段存在时间.于是线段树分治就好了. 然而在bzoj上t掉了,不知道是常数大了还是写挂了. 以及brk不知道是啥做数组名过不了编译. #include< ...

  9. Java若不为空则取其值的lambda表达式

      原本的写法是: Map<String, Object> map = new HashMap<>(); String text = ""; if(map. ...

  10. Leetcode 237.删除链表中的节点 By Python

    请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点. 现有一个链表 -- head = [4,5,1,9],它可以表示为: 4 -> 5 -> 1 - ...