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 集成在一起,并开箱提供方便的.易于使用的.基 ...
随机推荐
- Hot code replace (HCR)
https://wiki.eclipse.org/FAQ_What_is_hot_code_replace%3F https://zhidao.baidu.com/question/195505558 ...
- GS环境里面 9999 常用密码的加密后的值
1. Test6530 APTZ5s6vrw1dglqO/63osA== 2. aaaaaa zgnewZXGGoqcPGtNpXTSXQ== 3. cwpass 3Me34S0+zY4xEGUFtz ...
- 第八周PSP 新折线图和饼图 个人时间管理
1.PSP DATE START-TIME END-TIME EVENT DELTA TYPE 4.18 15.36 16.10 读构建执法 走神5min 29mi ...
- python数据相关性分析 (计算相关系数)
#-*- coding: utf-8 -*- #餐饮销量数据相关性分析 计算相关系数 from __future__ import print_function import pandas as pd ...
- HTML5 & auto download image
HTML5 & auto download image https://www.sitepoint.com/new-html5-attributes-hyperlinks-download-m ...
- js 錯誤
try{ //需要被檢測是否拋出錯誤 } catch(err) { //錯誤處理代碼 } try.catch成對出現 throw:拋出錯誤 當錯誤發生時,javascript引擎停止運行,并生成一個錯 ...
- Lodop代码设置打印机等信息后 设置预览可重选
Lodop打印控件默认在代码里指定了打印.纸张.纸张方向.份数等信息,在预览的界面的设置里是无法重新选择的,默认是禁止重选的,如果重选会提示,例如:“打印方向”已由程序控制,无法改变!“纸张大小”已由 ...
- CSS实现水平居中的5种思路
前面的话 水平居中是经常遇到的问题.看似方法较多,条条大路通罗马.但系统梳理下,其实都围绕着几个思路展开.本文将介绍关于水平居中的5种思路 text-align [思路一]:在父元素中设置text-a ...
- Luogu4238 【模板】多项式求逆(NTT)
http://blog.miskcoo.com/2015/05/polynomial-inverse 好神啊! B(x)=B'(x)·(2-A(x)B'(x)) 注意ntt的时候防止项数溢出,即将多项 ...
- Uva1001-floyd算法-建图
给出一些球,球内的时间为零,球之间的速度为10每单位. 给两个点,求最短时间. 把每一个球当做点,球间的距离就是floyd的d数组.之后跑一遍floyd wa了两发因为d数组定义成int了 #incl ...