tornado自定义分页扩展
一、分页扩展类
#! /usr/bin/env python
# -*- coding:utf-8 -*-
# __author__ = "TKQ"
class Pagination:
def __init__(self,current_page,all_item,base_url='',per_pagenum=5,min_per_pagenum=1,max_per_pagenum=100):
#每页条目数量
try:
per_pagenum=int(per_pagenum)
if per_pagenum < min_per_pagenum:
self._per_pagenum=min_per_pagenum
elif per_pagenum > max_per_pagenum:
self._per_pagenum = max_per_pagenum
else:
self._per_pagenum = per_pagenum
except:
self._per_pagenum=5 #总共页数
try:
all_item = int(all_item)
self._count=all_item
self._p_nums, c = divmod(all_item, self._per_pagenum)
if c > 0:
self._p_nums += 1
except Exception as e:
raise e # 当前页码
try:
page = int(current_page)
if page < 1:
self._current_page = 1
elif page > self._p_nums:
self._current_page = self._p_nums
else:
self._current_page = page
except:
self._current_page = 1 #基础URL
self.base_url = base_url @property
def page(self):
"""
:return: 返回当前页页码
"""
return self._current_page
@property
def num_per_page(self):
"""
:return: 每页显示项个数
"""
return self._per_pagenum
@property
def count(self):
"""
:return: 所有项个数
"""
return self._count
@property
def num_pages(self):
"""
:return:返回总页数.
"""
return self._p_nums def has_prev(self):
"""
:return: 是否有上一页
"""
if self._current_page == 1:
return False
else:
return True def has_next(self):
"""
:return: 是否有下一页
"""
if self._current_page == self._p_nums:
return False
else:
return True @property
def start_index(self):
"""
:return: 当前页起始条目索引值
"""
return (self._current_page - 1) * self._per_pagenum @property
def end_index(self):
"""
:return: 当前页终止条目索引值
"""
return self._current_page * self._per_pagenum #显示前端分页效果
def show_pager(self):
list_page = []
if self._p_nums < 11:
s = 1
t = self._p_nums + 1
else: # 总页数大于11
if self._current_page < 6:
s = 1
t = 12
else:
if (self._current_page + 5) < self._p_nums:
s = self._current_page - 5
t = self._current_page + 5 + 1
else:
s = self._p_nums - 11
t = self._p_nums + 1
# 首页
first = '<a href="/%s/1">首页</a>' % self.base_url
list_page.append(first)
# 上一页
if self.has_prev():
prev = '<a href="/%s/%s">上一页</a>' % (self.base_url,self._current_page - 1,)
list_page.append(prev)
#显示个页码
for p in range(s, t): # 1-11
if p == self._current_page:
temp = '<a class="active" href="/%s/%s">%s</a>' % (self.base_url,p, p)
else:
temp = '<a href="/%s/%s">%s</a>' % (self.base_url,p, p)
list_page.append(temp)
#下一页
if self.has_next():
next = '<a href="/%s/%s">下一页</a>' % (self.base_url,self._current_page + 1,)
list_page.append(next) # 尾页
last = '<a href="/%s/%s">尾页</a>' % (self.base_url,self._p_nums,)
list_page.append(last) # 跳转
jump = """<input type='text' /><a onclick="Jump('%s',this);">GO</a>""" % (self.base_url)
script = """<script>
function Jump(baseUrl,ths){
var val = ths.previousElementSibling.value;
if(val.trim().length>0){
location.href = baseUrl + val;
}
}
</script>"""
list_page.append(jump)
list_page.append(script)
str_page = "".join(list_page)
return str_page if __name__ == '__main__':
p=Pagination(2,100,'index',per_pagenum=10)
print p._p_nums,p.base_url,p._current_page
Pagination类
#! /usr/bin/env python
# -*- coding:utf-8 -*-
# __author__ = "TKQ"
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from pager import Pagination from tornado.options import define, options
define("port", default=8000, help="run on the given port", type=int) class IndexHandler(tornado.web.RequestHandler):
def get(self, page):
p = Pagination(page, 100, 'index', 10)
self.render('index.html', pager=p) if __name__ == "__main__":
tornado.options.parse_command_line()
app = tornado.web.Application([
(r"/index/(?P<page>\w*)",IndexHandler)
],template_path="template",static_path="static") http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
tornado
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.pager a{
display: inline-block;
padding: 5px;
margin: 3px;
background-color: cadetblue;
}
.pager a.active{
background-color: brown;
color: white;
}
</style> </head>
<body>
<div>
<p>起始项索引值:{{pager.start_index}}</p>
<p>终止项索引值:{{pager.end_index}}</p>
<p>当前页:{{pager.page}}</p>
<p>共 {{pager.num_pages}} 页</p>
<p>每页显示 {{pager.num_per_page}} 个</p>
<p>base_url: {{pager.base_url}} </p>
</div>
<div class="pager">
{% raw pager.show_pager() %}
</div> </body>
</html>
tornado模板使用
tornado自定义分页扩展的更多相关文章
- web框架--tornado自定义分页
1.tornado_main.py #!/usr/bin/env python # -*- coding: utf-8 -*- import tornado.web import tornado.io ...
- MVC下分页的自定义分页一种实现
1.引言 在MVC开发中我们经常会对数据进行分页的展示.通过分页我们可以从服务端获取指定的数据来进行展示.这样既节约了数据库查询的时间也节约了网络传输的数据量.在MVC开发中使用的比较多的应该是MVC ...
- mvc自定义分页(加页数的)(转)
1.引言 在MVC开发中我们经常会对数据进行分页的展示.通过分页我们可以从服务端获取指定的数据来进行展示.这样既节约了数据库查询的时间也节约了网络传输的数据量.在MVC开发中使用的比较多的应该是MVC ...
- Django自定义分页、bottle、Flask
一.使用django实现之定义分页 1.自定义分页在django模板语言中,通过a标签实现; 2.前段a标签使用<a href="/user_list/?page=1"> ...
- Python学习(三十六)—— Cookie、Session和自定义分页
一.Django中操作Cookie 获取Cookie request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR ...
- Django(十四)分页器(paginator)及自定义分页D
http://www.mamicode.com/info-detail-1724597.html http://www.cnblogs.com/wupeiqi/articles/5246483.htm ...
- python 全栈开发,Day115(urlencode,批量操作,快速搜索,保留原搜索条件,自定义分页,拆分代码)
今日内容前戏 静态字段和字段 先来看下面一段代码 class Foo: x = 1 # 类变量.静态字段.静态属性 def __init__(self): y = 6 # 实例变量.字段.对象属性 # ...
- Django Cookie Session和自定义分页
Django中操作Cookie 获取Cookie request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR, ...
- Django——自定义分页(可调用)
1.view from django.shortcuts import render,HttpResponse # Create your views here. from app01.models ...
随机推荐
- Spring事务失效的 8 大原因,这次可以吊打面试官了!
今天再来一篇<吊打面试官>系列,这次真的要吊打了,哈哈!(看往期吊打系列请在后台回复:吊打,我会陆续更新--) 前几天栈长不是发了一篇文章,里面有一个关于事务失效的问题: 用 Spring ...
- (二)Django模板的应用
一.配置项目的基础模板,分三部分 base.html 基础部分,需要包括基本的HTML标签 header部分 body部分 html闭合标签 {% load staticfiles %} <!D ...
- Spark学习笔记(三)—— Standalone模式
上篇笔记记录了Local模式的一些内容,但是实际的应用中很少有使用Local模式的,只是为了我们方便学习和测试.真实的生产环境中,Standalone模式更加合适一点. 1.基础概述 Standalo ...
- cc协议(知识共享,Creative Commons),程序员的基础守则之一
知识共享 我在浏览git开源代码的时候,浏览到一句话: 版权声明:本文为CSDN博主「...」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明. 原文链接:http ...
- 3 分钟带你深入了解 Cookie、Session、Token
经常会有用户咨询,CDN 是否会传递 Cookie 信息,是否会对源站 Session 有影响,Token 的防盗链配置为什么总是配置失败?为此,我们就针对 Cookie.Session 和 Toke ...
- pc和H5响应式方案
pc响应式:(所有应用在pc端) 解决方案1.媒体查询 2.flex,百分比 3.栅格布局 媒体查询 @media screen and (max-width:768px) @media scree ...
- 三、Nginx原理解析
Nginx原理解析 一.反向代理 工作流程 用户通过域名发出访问Web服务器的请求,该域名被DNS服务器解析为反向代理服务器的IP地址: 反向代理服务器接受用户的请求: 反向代理服务器在本地缓存中查找 ...
- Maven 基础(一) | 使用 Maven 的正确姿势
一.什么是 Maven? Maven 是一个项目管理工具,它的本质是一个项目对象模型(POM),体现在配置中就是我们常见的 pom.xml 文件,而这个 pom 文件就是 Maven 的核心,它管理了 ...
- dp-最长公共子序列(LCS)
字符序列 与 字符字串的区别 序列是可以不连续的字符串 , 字串必须要是连续的 . 问题描述 : 给定两串字符串 abcde 和 acdf , 找出 2 串中相同的字符序列,观察知 相同的字符序列为 ...
- Linux 编程题
1. 产生一个进程树,父进程有2个子进程,这2个子进程分别又有2个子进程,每个进程休眠5秒后退出,并在退出前打印自己的进程id号. # include<stdio.h> # include ...