关于python-web开发中分页的处理

来源:互联网 发布:js闪动文字 编辑:程序博客网 时间:2024/05/24 04:20

本案例基于tornado基础上

一、分页的效果

这里写图片描述

二、封装一个分页的方法

#!/usr/bin/env python# encoding: utf-8"""    定义一个分页的方法    current_page:表示当前页面    countent:查询出来全部的数据    MAX_PAGE:表示一页显示多少,一般定义在一个常量的文件中"""def get_page_list(current_page, countent, MAX_PAGE):    start = (current_page - 1) * MAX_PAGE    end = start + MAX_PAGE    # 进行切片操作    split_countent = countent[start:end]    # 计算总共多少页    count = len(countent) / MAX_PAGE    if len(countent) % MAX_PAGE != 0:        count += 1    # 上一页    pre_page = current_page - 1    # 下一页    next_page = current_page + 1    # 边界点的判断    if pre_page == 0:        pre_page = 1    if next_page > count:        next_page = current_page    # 进行分页处理,把当前显示的全部页码返回到前端,前端直接遍历就可以    if count < 5:        pages = [p for p in xrange[1, count + 1]]    elif current_page <= 3:        pages = [p for p in xrange(1, 6)]    elif current_page >= count - 2:        pages = [p for p in xrange(count - 4, count + 1)]    else:        pages = [p for p in xrange(current_page - 2, current_page + 3)]    return {        'split_countent': split_countent,  # 当前显示的        'count': count,  # 总共可以分多少页        'pre_page': pre_page,  # 上一页        'next_page': next_page,  # 下一页        'current_page': current_page,  # 当前页        'pages': pages  # 全部的页面吗    }

三、调用分页方法

def get(self, page):    files = Files.display_file_list();    # 这个get_page_list函数中返回是一个对象,files_page["split_countent"]表示取当前显示的内容    files_page = get_page_list(int(page), files, MAX_PAGE)    self.render("admin/main/file_list.html", files=files_page["split_countent"], files_page=files_page)

四、点击确认跳转到分页

class ToPage(BaseHandler):    def post(self):        page = self.get_argument("page",'');        files = Files.display_file_list();        # 这个get_page_list函数中返回是一个对象,files_page["split_countent"]表示取当前显示的内容        files_page = get_page_list(int(page), files, MAX_PAGE)        self.render("admin/main/file_list.html", files=files_page["split_countent"], files_page=files_page)

五、前端页面

<div class="row">    <ul class="pagination pagination-sm" style="width: 340px;float: left" id="page-num">        <li><a href="/admin/selfInfo/{{ files_page['pre_page'] }}">«</a></li>        {% if files_page['current_page'] != 1 %}            <li><a href="/admin/selfInfo/1">首页</a></li>        {% end %}        {% for index in files_page['pages']%}            <li {%  if index ==files_page['current_page'] %} class="active" {% end %} >                <a href="/admin/selfInfo/{{ index }}">{{ index }}</a>            </li>        {% end %}        {% if files_page['current_page'] != files_page['count']%}        <li><a href="/admin/selfInfo/{{ files_page['count'] }}">尾页</a></li>        {% end %}        <li><a href="/admin/selfInfo/{{ files_page['next_page'] }}">»</a></li>    </ul>    <p style="float: left;margin: 26px 0;">共{{files_page['count']}}页 | 第 {{files_page['current_page']}} 页</p>    <div style="float:left;margin-top: 26px;margin-left: 10px;">        <span style="display: block;float: left;">跳转至:</span>        <form style="float: right;margin-top: -2px;margin-left: 10px;" action="/topage" method="post">            <input type="text" style="width: 40px;text-align: center" name="page"/>            <input type="submit" value="确认" />        </form>    </div></div>