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 ...
随机推荐
- 4.eclipse中导入别人用的源代码问题
最近在导入别人用的源代码问题时,出现两个问题: 问题一:提示无法解析导入,如下图: 解决方法:删除项目下的module-info.java文件即可,或者在创建项目时将创建module-info.jav ...
- Winform PPT切换图片效果
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- config.xml写入和读取
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- 致Java初学者
致Java初学者 精心整理资料点击获取 前言 能看到这篇文章的朋友,应该都或多或少的了解Java,也许你现在是个菜鸟还在成长的路上.再此期间你一定遇到了很多困惑疑虑,对未来的学习方向感到很迷惑.作 ...
- Spring--1.了解Spring
1.框架:半成品软件: 高度抽取可重用代码的一种设计:高度的通用性:事务控制,强大的servlet,项目中的一些工具... 多个可重用模块的集合,形成一个某个领域的整体解决方案: 2.Spring: ...
- Java BIO NIO 与 AIO
回顾 上一章我们介绍了操作系统层面的 IO 模型. 阻塞 IO 模型. 非阻塞 IO 模型. IO 复用模型. 信号驱动 IO 模型(用的不多,知道个概念就行). 异步 IO 模型. 并且介绍了 IO ...
- LoopBox 用于包装循环的盒子
/******************************************************* * * 作者:朱皖苏 * 创建日期:20180608 * 说明:此文件只包含一个类,具 ...
- 简单介绍HTTP的请求(get请求和post请求)以及对应的响应的内容
链接解析: https://oa.hbgf.net.cn/login.jsp;jsessionid=47084322738F8DB18D60752944DFD1AA http或者https表示使用的是 ...
- Ubuntu18.04 安装配置mongodb
一.安装 # 1. 更新 sudo apt-get update # 2. 安装 sudo apt-get install -y mongodb # 3. 查看是否安装成功 # a. 服务状态 sud ...
- 4.JavaSE之标识符
标识符:Java所有的组成部分都需要名字.类名.变量名以及方法名都被称为标识符. 关键字:abstract.assert.boolean.breake.public.static.class...