五脏俱全的tornado 分页小demo

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import tornado.ioloop
import tornado.web

listinfo = [{"username": "alex0", "email": "[email protected]"}, {"username": "alex1", "email": "[email protected]"},
           {"username": "alex2", "email": "[email protected]"}]
for i in range(300):
    temp = {"username": "hi" + str(i), "email": "[email protected]"+str(i)}
    listinfo.append(temp)  # create information

class LoginHandler(tornado.web.RequestHandler):

    def get(self, page):
        try:
            page = int(page)
        except:
            page = 1
        if page < 1:
            page = 1
        start = (page - 1) * 5
        end = page * 5
        current_list = listinfo[start:end]  # show current page
        all_page, c = divmod(len(listinfo), 5)
        if c > 1:
            all_page += 1

        page2 = []
        if all_page < 9:
            s = 1
            t = all_page
        else:
            if page < 5:
                s = 1
                t = 9
            else:
                if (page+5) > all_page:
                    s = all_page - 8
                    t = all_page
                else:
                    s = page - 4
                    t = page + 5

        head_page = "<a class = ‘active‘ href = ‘/login/1‘>首页</a>"
        page2.append(head_page)

        if page <= 1:
            front_page = "<a class = ‘active‘ href = ‘javascript:void(0)‘;></a>"
        else:
            front_page = "<a class = ‘active‘ href = ‘/login/%s‘>上一页</a>" % (page - 1)
        page2.append(front_page)

        for p in range(s, t):
            if p == page:
                temp = "<a class = ‘active‘ href = ‘/login/%s‘>%s</a>" % (p, p)
                page2.append(temp)

            else:
                temp = "<a href = ‘/login/%s‘>%s</a>" % (p, p)
                page2.append(temp)

        if page >= all_page:
            next_page = "<a class = ‘active‘ href = ‘javascript:void(0);‘></a>"
        else:
            next_page = "<a class = ‘active‘ href = ‘/login/%s‘>下一页</a>" % (page + 1)
        page2.append(next_page)

        tail_page = ‘<a class = "active"  href = "/login/%s ">尾页</a>‘ % all_page
        page2.append(tail_page)

        jump = """<input type=‘text‘/><a onclick=‘J(this);‘>GO</a>"""
        script = """<script>
        function J(ths)
        {
        var val = ths.previousElementSibling.value;
        if(val.trim().length>0){
             location.href = ‘/login/‘ + val;
            }
        }
        </script>"""
        page2.append(jump)
        page2.append(script)
        # use javascript
        str_page1 = "".join(page2)
        self.render(‘home.html‘, list_info=current_list, current=page,page2=str_page1)

    def post(self, page):
        username = self.get_argument("username", None)
        email = self.get_argument("email", None)
        data = {"username":username, "email": email}
        listinfo.append(data)
        self.redirect("/login/"+page) # stop current page

settings = {
    ‘template_path‘: ‘views‘,
     }

application = tornado.web.Application([
    (r"/login/(?P<page>\w*)", LoginHandler),
], **settings)

if __name__ == "__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

fenye.py

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style >
        .pager a{
         display: inline-block;
         padding:2px;
         margin:5px;
         background-color:red;
         }
    </style>
    <style>
        .pager a.active{
        background-color:white;
        color:blue;
        }
    </style>
</head>
<body>
     <form method="post" action="/login/{{current}}">
         <input type="text" name="username"/>
         <input type="text" name="email"/>
         <input type="submit" value="submit"/>
     </form>
     <h>show dataes as follow:</h>
     <table border="1">
         <thead>
             <tr>
                 <th>user</th>
                 <th>email</th>
             </tr>

         </thead>
         <tbody>
            {% for line in list_info %}
              <tr>
                  <td>{{line["username"]}}</td>
                  <td>{{line["email"]}}</td>
              </tr>
            {% end %}
         </tbody>
     </table>
     <div class = "pager">
         {% raw page2 %}
     </div>
</body>
</html>

fenye.html

效果图片如下:

首页:

上一页:

尾页:

GO:

时间: 2024-10-25 13:11:00

五脏俱全的tornado 分页小demo的相关文章

SpringBoot-Vue实现增删改查及分页小DEMO

前言 主要通过后端 Spring Boot 技术和前端 Vue 技术来简单开发一个demo,实现增删改查.分页功能以及了解Springboot搭配vue完成前后端分离项目的开发流程. 开发栈 前端 开发工具:WebStorm 开发框架:vue + axios 包管理工具: npm 打包工具:webpack 后端 开发工具:IDEA 开发框架:Springboot + mybatis 打包工具:maven 数据库: MySQL PS:假设以上的的工具你都安装好啦,写CRUD小DEMO时进坑了,这篇

SQL分页小Demo

SELECT @TotalCount=count(1) FROM TableA A WITH(NOLOCK) INNER JOIN TableB B WITH(NOLOCK) ON A.Id=B.Id WHERE A.Name=ISNULL(@name,A.Name) AND A.Age=ISNULL(@Age,A.Age) AND B.Address=ISNULL(@Address, B.Address) AND B.GoodsName like '%'+ISNULL(@GoodsName,'

Nancy之基于Self Hosting的补充小Demo

前面把Hosting Nancy with ASP.NET.Self Hosting Nancy和Hosting Nancy with OWIN 以demo的形式简单描述了一下. 这篇是为Self Hosting Nancy.和Owin 下面的Self Hosting作个补充. 首先是Self Hosting Nancy的补充: 这里主要是介绍一下Topshelf 官网:http://topshelf-project.com/ GitHub地址:https://github.com/Topshe

用backbone实现的一个MVC的小demo

一.Apache配置 本实例需要使用php支持.要现在Apache中配置虚拟目录,在Apache下的httpd-vhosts.conf文件中添加如下代码 <VirtualHost *:80> DocumentRoot "D:/htdocs/backbone_demo" ServerName www.backbonedemo.cn </VirtualHost> 在windows的hosts文件中添加配置,hosts文件的位置在c:\windows\system32

结对项目小DEMO

这次小DEMO主要实现下面两个功能: 实现两个页面的相互跳转 通过多线程实现网络发送请求 本人负责界面与说明文档编写,搭档负责java代码的具体实现. xml代码: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_

React问答小demo

在学习react初期,看了一些视频和资料,react基础知识差不多学完,跟着网上的一个教程,做了一个小型的问答demo. 需求看图说: 1.点击"添加"按钮,显示问题输入表单,再次点击,隐藏表单.同时,点击"取消"按钮,隐藏表单. 2.输入问题标题和内容后,点击"确认"按钮,将问题显示在下方(按照投票数从高到低). 3.每个问题有加票和减票功能,在点击的同时,将问题按照投票数从高到低排序. 实现过程: 一.开发环境和工具 1.npm init (

Nancy之基于Nancy.Owin的小Demo

前面做了基于Nancy.Hosting.Aspnet和Nancy.Hosting.Self的小Demo 今天我们来做个基于Nancy.Owin的小Demo 开始之前我们来说说什么是Owin和Katana 什么是Owin呢? 官网地址:http://owin.org OWIN在.NET Web Servers与Web Application之间定义了一套标准接口,OWIN的目标是用于解耦Web Server和Web Application. 什么是Katana呢? 官网地址:http://kata

第一个spring小demo

工作中用spring有一年多了,基本弄懂了bean配置文件的配置,但是却没有对spring配置文件,加载有更多的认识,今天动手写了第一个spring的小demo. 这个demo之前是想做web版的,但是web的启动比较麻烦,不如直接使用main方法执行直观,所以,就使用main方法来读取配置文件,启动spring. 看一下项目的结构  其中src部分是项目源码 和 配置文件applicationContext.xml WebContent 目录下面的WEB-INF/lib 目录下面存放的是spr

利用block完成回调,小demo一个

利用block完成回调,小demo一个.闲话少说,直接上代码了!O(∩_∩)O~ TestObject.h #import <Foundation/Foundation.h> typedef void (^FinishBlock)(NSString *backStr); @interface TestObject : NSObject //能进行回调的方法 - (void)playSomeTime:(FinishBlock)block; @end TestObject.m #import &q