zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    通过唯一ID实现简单的日志跟踪实现
    从零单排入门机器学习:Octave/matlab的经常使用知识之矩阵和向量
    zoj 1671 Walking Ant
    JDBC基础
    Android从源码看ListView的重用机制
    JavaScript设计模式 Item9 --适配器模式Adapter
    C++11新特性之 std::forward(完美转发)
    [组合数]求组合数的几种方法总结
    HDU 4005 The war(双连通好题)
    Workspace in use or cannot be created, choose a different one.--错误解决的方法
  • 原文地址:https://www.cnblogs.com/ssyfj/p/8525070.html
Copyright © 2011-2022 走看看