Python之tornado框架实现翻页功能

1、结果如图所示,这里将html页面与网站的请求处理放在不同地方了

start.py代码

import tornado.ioloop
import tornado.web
from controllers import home

settings = {

    ‘static_path‘:‘statics‘,#静态文件配置,需要特殊处理
    ‘static_url_prefix‘:‘/sss/‘,#标记文件开始的名字
}

#路由映射,根据不同url对应到不同的类里面
application = tornado.web.Application([
    (r"/index/(?P<page>\d*)", home.IndexHandler),
],**settings)#基于正则的路由,?P<page>表示为正则匹配到的内容起了一个名字

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

  home.py里面的代码

import tornado.web

List_Info=[
    {‘username‘:‘jay‘,‘email‘:‘[email protected]‘}
]

class IndexHandler(tornado.web.RequestHandler):
    def get(self,page):

        #每页显示五条数据
        #page是当前页
        #第一页: 0:5 List_Info[0:5]
        #第二页:5:10
        #start: (page-1)*5
        #end:   (page)*5

        try:page=int(page)
        except:page=1
        print(page)
        if page <1:
            page =1
        start = (page - 1)*5
        end = page * 5
        current_ist = List_Info[start:end]

        self.render(‘E:\\练习2\\tornado_day2\\views\\home\\index.html‘,list= current_ist,page=page)
#E:\\练习2\\tornado_day2\\views\\home\\index.html
    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)

  home文件里面的index.html代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index首页</title>
</head>
<body>
<h1>提交数据</h1>
<form method="post" action="/index/{{page}}">
    <input name="username" type="text">
    <input name="email" type="text">
    <input value="提交" type="submit">
</form>
<h1>显示数据</h1>
<table border="2">
    <thead><tr>
        <th>用户名</th>
        <th>邮箱</th>
    </tr></thead>
    <tbody>
    {% for line in list %}
    <tr>
        <td>{{line[‘username‘]}}</td>
        <td>{{line[‘email‘]}}</td>
    </tr>
    {% end %}
    </tbody>
</table>
</body>
</html>

  运行结果如图

最后我们修改一下home里面的代码,实现选择页面功能

import tornado.web

List_Info=[
    {‘username‘:‘jay‘,‘email‘:‘[email protected]‘}
]

for i in range(1000):
    data = {‘username‘: i, ‘email‘: i * 2}
    List_Info.append(data)
class IndexHandler(tornado.web.RequestHandler):
    def get(self,page):

        #每页显示五条数据
        #page是当前页
        #第一页: 0:5 List_Info[0:5]
        #第二页:5:10
        #start: (page-1)*5
        #end:   (page)*5

        try:page=int(page)
        except:page=1

        if page <1:
            page =1
        start = (page - 1)*5
        end = page * 5#每页最多显示五条数据
        current_ist = List_Info[start:end]
        all_page ,c = divmod(len(List_Info),5)#每五条数据一页,判断多少页
        if c>0:#有余数则多一页
            all_page +=1
        list_page =[]
        print(all_page)
        if page <5:
            for p in range(9):
                if p+1 == page:
                    temp = ‘<a class="active" href="/index/%s">%s</a>‘ % (p+1,p+1)
                else:
                    temp = ‘<a href="/index/%s">%s</a>‘ % (p + 1, p + 1)
                list_page.append(temp)
        elif page >all_page-5:#判断页数是否在最前或者最后五页

            for p in range(all_page-9,all_page):
                if p + 1 == page:
                    temp = ‘<a class="active" href="/index/%s">%s</a>‘ % (p + 1, p + 1)
                else:
                    temp = ‘<a href="/index/%s">%s</a>‘ % (p + 1, p + 1)
                list_page.append(temp)
        else:
            for p in range(page-5,page+4):
                if p+1 == page:
                    temp = ‘<a class="active" href="/index/%s">%s</a>‘ % (p+1,p+1)
                else:
                    temp = ‘<a href="/index/%s">%s</a>‘ % (p + 1, p + 1)
                list_page.append(temp)
        str_page = ‘‘.join(list_page)
        # str_page = list_page,不写join则会在页面上显示逗号

        self.render(‘E:\\练习2\\tornado_day2\\views\\home\\index.html‘,list= current_ist,page=page,str_page=str_page)
#E:\\练习2\\tornado_day2\\views\\home\\index.html
    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)
        print(List_Info)

  对于index.html文件也要做少少修改

最后把home里面的代码封装一下,如图

import tornado.web

List_Info=[
    {‘username‘:‘jay‘,‘email‘:‘[email protected]‘}
]

for i in range(1000):
    data = {‘username‘: i, ‘email‘: i * 2}
    List_Info.append(data)#认为创建1000条数据

class Pagination:
    def __init__(self,current_page,all_item):
        all_page, c = divmod(len(all_item), 5)  # 每五条数据一页,判断多少页
        self.all_page=all_page

        if c > 0:  # 有余数则多一页
            all_page += 1

        self.all_page = all_page#获取最大页面
        try:
            current_page=int(current_page)
        except:
            current_page=1

        if current_page <1:
            current_page =1

        self.current_page = current_page

    @property
    def strat(self):
        return (self.current_page-1)*5

    @property
    def end(self):
        return self.current_page * 5

    def get_page(self,base_url):
        self.all_page, c = divmod(len(List_Info), 5)  # 每五条数据一页,判断多少页
        if c > 0:  # 有余数则多一页
            self.all_page += 1

        list_page = []

        if self.current_page < 5:
            for p in range(9):
                if p + 1 == self.current_page:
                    temp = ‘<a class="active" href="%s %s">%s</a>‘ % (base_url,p + 1, p + 1)
                else:
                    temp = ‘<a href="%s%s">%s</a>‘ % (base_url,p + 1, p + 1)
                list_page.append(temp)
        elif self.current_page > self.all_page - 5:  # 判断页数是否在最前或者最后五页

            for p in range(self.all_page - 9, self.all_page):
                if p == self.current_page:
                    temp = ‘<a class="active" href="%s %s">%s</a>‘ % (base_url, p , p )
                else:
                    temp = ‘<a href="%s%s">%s</a>‘ % (base_url, p, p )
                list_page.append(temp)
        else:
            for p in range(self.current_page - 5, self.current_page + 4):
                if p  == self.current_page:
                    temp = ‘<a class="active" href="%s %s">%s</a>‘ % (base_url, p , p)
                else:
                    temp = ‘<a href="%s%s">%s</a>‘ % (base_url, p , p )
                list_page.append(temp)
        str_page = ‘‘.join(list_page)
        return str_page
        # str_page = list_page,不写join则会在页面上显示逗号

class IndexHandler(tornado.web.RequestHandler):
    def get(self,page):

        page_obj =Pagination(page,List_Info)#把当前访问页以及要传给前端的数据传给类里面

        current_ist =List_Info[page_obj.strat:page_obj.end]#以访问字段的方式访问方法,获取数据
        str_page = page_obj.get_page(‘/index/‘)#底下的页数码

        self.render(‘E:\\练习2\\tornado_day2\\views\\home\\index.html‘,list= current_ist,page=page_obj.current_page,str_page=str_page)
#page_obj.current_page表示把处理过的页数传进去
    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)
        print(List_Info)

  运行如图

时间: 2024-12-08 18:27:45

Python之tornado框架实现翻页功能的相关文章

Atitit.pagging &#160;翻页功能解决方案专题 与 目录大纲 v3 r44.docx

Atitit.pagging  翻页功能解决方案专题 与 目录大纲 v3 r44.docx 1.1. 翻页的重要意义1 1.2. Dep废弃文档   paip.js翻页分页pageing组件.txt1 1.3. ---原理1 1.4. -------lib1 1.1.   翻页的重要意义 技术上,商业上,翻页都是一个非常高频率的功能.. 提升高频功能的效率,可以大力提升项目整体效率.. 效率优化的重要原则就是高频功能效率优化 1.2. Dep废弃文档   paip.js翻页分页pageing组件

jsp实现上一页下一页翻页功能

前段时间一直忙于期末考试和找实习,好久没写博客了. 这段时间做了个小项目,包含了翻页和富文本编辑器Ueditor的两个知识点,Ueditor玩的还不是很深,打算玩深后再写篇博客. 要实现翻页功能,只需要设置一个pageIndex即可,然后每次加载页面时通过pageIndex去加载数据就行. 那么我们可以设置一个隐藏的input框,用于传递pageIndex给下个页面. 当我们点击上一页的时候,通过js方法改变pageIndex的值,再提交表单即可 二话不多说,看代码,代码里面写的还算比较清楚.

asp.net GridView 表格之分页显示与翻页功能及自定义翻页页码样式

一.实现分页功能  GridView实现分页只需要在属性框中将AllowPaging(是否在GridView中打开分页功能)设置为true即可 有时打开分页后不显示页码 确保AllowCustomPaging(是否打开对自定义分页的支持)为False即可 二.实现翻页功能  如何点击页码实现翻页呢? 在属性框中事件选择设置PageIndexChanging(在Grid View的当前索引页正在更改事触发)这一事件 后台代码如下 /// <summary> /// 翻页操作 /// 在GridV

【tool】软件测试中翻页功能测试用例设计

翻页功能我们常碰到的一般有以下几个功能: 1.首页.上一页.下一页.尾页. 2.总页数,当前页数 3.指定跳转页 4.指定每页显示条数 当然,有一些是少于多少页,全部以数字的形式显示,多于多少页后,才出现下一页的控件.本文暂且用以上四点来做为通用的用例来设计吧. 对于1翻页链接或按钮的测试,主要要检查的测试点有: 1.有无数据时控件的显示情况 2.在首页时,首页和上一页是否能点击 3.在尾页时,下一页和尾页是否能点击 4.在非首页和非尾页时,四个按钮功能是否正确 5.翻页后,列表中的记录是否仍按

翻页功能的测试用例

翻页功能我们常碰到的一般有以下几个功能:1.首页.上一页.下一页.尾页.2.总页数,当前页数3.指定跳转页4.指定每页显示条数当然,有一些是少于多少页,全部以数字的形式显示,多于多少页后,才出现下一页的控件.本文暂且用以上四点来做为通用的用例来设计吧. 对于1翻页链接或按钮的测试,主要要检查的测试点有:1.有无数据时控件的显示情况2.在首页时,首页和上一页是否能点击3.在尾页时,下一页和尾页是否能点击4.在非首页和非尾页时,四个按钮功能是否正确5.翻页后,列表中的记录是否仍按照指定的排序列进行了

jquery.Table实现的翻页功能比较完整漂亮,本想扩展个模版DIV

jquery.dataTable实现的翻页功能比较完整漂亮,本想提取其的翻页部分,再结合模版DIV,bootstrop实现聊天记息的展示. jquery.Table 与table结合的较紧,不能在很下提取完成. 看了近一天的源码后,对API的结构,实现方式和思路有了基本的认识,但终因工作量太大放弃了提取的念头,时间所迫转用KenDo的翻页 不过这过程中,对其的API实现有了较深的认识. 这里摘录部分资料 以下是在进行dataTable绑定处理时候可以附加的参数: 属性名称 取值范围 解释 bAu

QTableView和QTableWidget翻页功能实现

主要使用QTableView和QTableWidget中的三个函数实现 QTableView::verticalScrollBar()->setSliderPosition():  //设置当前滑动条的位置 QTableView::verticalScrollBar()->maximum();             //滑动条能移动的最大位置 QTableView::verticalScrollBar()->value();                   //获得当前滑动条的位置

asp.net mvc 使用MvcPager实现翻页功能

方法-: 1,在Service中使用pagedlist实现翻页的方法 写法一: /// <summary> /// 政策法规的more列表翻页 /// </summary> /// <param name="page">分页的页码</param> /// <param name="sid">部门代码</param> /// <returns></returns> publ

Web测试——翻页功能测试用例

参考:https://wenku.baidu.com/view/e6462707de80d4d8d15a4f1e.html?rec_flag=default&mark_pay_doc=2&mark_rec_page=1&mark_rec_position=5&mark_rec=view_r_1&clear_uda_param=1 翻页功能常用到几个功能: 1.首页.上一页.下一页.尾页. 2.总页数.当前页数 3.指定跳转页 4.指定每页显示条数 1.翻页链接或按钮