python---自定义分页类
# 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---自定义分页类的更多相关文章
- Django 自定义分页类
分页类代码: class Page(object): ''' 自定义分页类 可以实现Django ORM数据的的分页展示 输出HTML代码: 使用说明: from utils import mypag ...
- Python自定义线程类简单示例
Python自定义线程类简单示例 这篇文章主要介绍了Python自定义线程类,结合简单实例形式分析Python线程的定义与调用相关操作技巧,需要的朋友可以参考下.具体如下: 一. 代码 # - ...
- Python自定义分页组件
为了防止XSS即跨站脚本攻击,需要加上 safe # 路由 from django.conf.urls import url from django.contrib import admin from ...
- thinkphp自定义分页类
先来看下这个分页的样式,没写css,确实丑 什么时候写样式再来上传下css吧...... 就是多一个页面跳转功能 先把这个代码贴一下 <?php namespace Component; cla ...
- PHP24 自定义分页类
分页类的定义 <?php /** * Class MyPage 分页类 * @package core */ class MyPage { private $totalCount; //数据表中 ...
- Python 自定义元类的两种写法
有关元类是什么大家自己搜索了解,我这里写一下实现元类的两种写法 # 自定义元类 #继承type class LowercaseMeta(type): ''' 修改类的属性名称为小写的元类 ''' # ...
- php : 自定义分页类
Page.class.php : <?php namespace Tools; class Page { private $total; //数据表中总记录数 private $listRows ...
- python 全栈开发,Day115(urlencode,批量操作,快速搜索,保留原搜索条件,自定义分页,拆分代码)
今日内容前戏 静态字段和字段 先来看下面一段代码 class Foo: x = 1 # 类变量.静态字段.静态属性 def __init__(self): y = 6 # 实例变量.字段.对象属性 # ...
- python---django中自带分页类使用
请先看在学习tornado时,写的自定义分页类:思路一致: python---自定义分页类 1.基础使用: 后台数据获取: from django.core.paginator import Pagi ...
- [ Laravel 5.6 文档 ]laravel数据库操作分页(自定义分页实现和自定义分页样式)
简介 在其他框架中,分页可能是件非常痛苦的事,Laravel 让这件事变得简单.易于上手.Laravel 的分页器与查询构建器和 Eloquent ORM 集成在一起,并开箱提供方便的.易于使用的.基 ...
随机推荐
- Android WebView 文明踩坑之路
情景一 webview 以头布局的形式添加到 RecyclerView 中,第一次进入页面,当页面中有 EditText 并且点击时,甚至是类似点赞更换图片.点击 WebView 任意区域,都会造成 ...
- Estimating the number of receiving nodes in 802.11 networks via machine learning
来源:IEEE International Conference on Communications 作者:Matteo Maria 年份:2016 摘要: 现如今很多移动设备都配有多个无线接口,比如 ...
- const修饰符与函数
一.用const修饰函数的参数 函数参数类型前加const指明该参数为常量,在函数内部不可改变. void func(const int x) { //x不可以在内部进行赋值等操作. } 注:当参数为 ...
- Qt__绘制系统
Qt绘制系统简介 Qt 的绘图系统允许使用相同的 API 在屏幕和其它打印设备上进行绘制.整个绘图系统基于QPainter,QPainterDevice和QPaintEngine三个类. QPaint ...
- C++的内存分区
C++的内存划分为栈区.堆区.全局区/静态区.字符串常量和代码区. 栈区 由系统进行内存的管理. 主要存放函数的参数以及局部变量.在函数完成执行,系统自行释放栈区内存,不需要用户管理.整个程序的栈区的 ...
- 将ubuntu14.04 从mysql从5.5删除之后安装5.7遇到的一些问题(本篇不讨论热升级)
五一放假实在无聊 继续玩弄新的服务器.发现有台mysql版本实在有点老,估计是akiho直接使用 apt-get install mysql-server ,然后又没有更新到最新的源,然后无脑安装了5 ...
- [Java] Thread的start()和run()函数区别
1.start()方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码: 通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状 ...
- rabbitmq代码配置
package com.qukoucai.test; import com.rabbitmq.client.AMQP;import com.rabbitmq.client.AMQP.BasicProp ...
- BZOJ4182 Shopping(点分治+树形dp)
点分治,每次考虑包含根的连通块,做树形多重背包即可,dfs序优化.注意题面给的di范围是假的,坑了我0.5h,心态炸了. #include<iostream> #include<cs ...
- P2707 Facer帮父亲
题目背景 Facer可是一个孝顺的孩纸呦 题目描述 Facer的父亲是一名经理,现在总是垂头丧气的. Facer问父亲,怎么啦?父亲说,公司出了点问题啊. 公司管理着N个风景点,每个风景点都有不少人来 ...