# 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. Android WebView 文明踩坑之路

    情景一 webview 以头布局的形式添加到 RecyclerView 中,第一次进入页面,当页面中有 EditText 并且点击时,甚至是类似点赞更换图片.点击 WebView 任意区域,都会造成 ...

  2. Estimating the number of receiving nodes in 802.11 networks via machine learning

    来源:IEEE International Conference on Communications 作者:Matteo Maria 年份:2016 摘要: 现如今很多移动设备都配有多个无线接口,比如 ...

  3. const修饰符与函数

    一.用const修饰函数的参数 函数参数类型前加const指明该参数为常量,在函数内部不可改变. void func(const int x) { //x不可以在内部进行赋值等操作. } 注:当参数为 ...

  4. Qt__绘制系统

    Qt绘制系统简介 Qt 的绘图系统允许使用相同的 API 在屏幕和其它打印设备上进行绘制.整个绘图系统基于QPainter,QPainterDevice和QPaintEngine三个类. QPaint ...

  5. C++的内存分区

    C++的内存划分为栈区.堆区.全局区/静态区.字符串常量和代码区. 栈区 由系统进行内存的管理. 主要存放函数的参数以及局部变量.在函数完成执行,系统自行释放栈区内存,不需要用户管理.整个程序的栈区的 ...

  6. 将ubuntu14.04 从mysql从5.5删除之后安装5.7遇到的一些问题(本篇不讨论热升级)

    五一放假实在无聊 继续玩弄新的服务器.发现有台mysql版本实在有点老,估计是akiho直接使用 apt-get install mysql-server ,然后又没有更新到最新的源,然后无脑安装了5 ...

  7. [Java] Thread的start()和run()函数区别

    1.start()方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码: 通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状 ...

  8. rabbitmq代码配置

    package com.qukoucai.test; import com.rabbitmq.client.AMQP;import com.rabbitmq.client.AMQP.BasicProp ...

  9. BZOJ4182 Shopping(点分治+树形dp)

    点分治,每次考虑包含根的连通块,做树形多重背包即可,dfs序优化.注意题面给的di范围是假的,坑了我0.5h,心态炸了. #include<iostream> #include<cs ...

  10. P2707 Facer帮父亲

    题目背景 Facer可是一个孝顺的孩纸呦 题目描述 Facer的父亲是一名经理,现在总是垂头丧气的. Facer问父亲,怎么啦?父亲说,公司出了点问题啊. 公司管理着N个风景点,每个风景点都有不少人来 ...