Python Tornado get请求的分页(模板渲染)

Pagination , 加一个search-filter,提升兼容性,urlencode路径拼接

import math
from urllib import urlencode
#Python3   from urllib.parse import urlencode


class Pagination:
    def __init__(self, search_filter, all_item, limit, show_page):
        all_pager, c = divmod(len(all_item), limit)
        if c > 0:
            all_pager += 1
        try:
            current_page = int(search_filter['page'])
        except Exception as e:
            current_page = 1
        if current_page <= 0:
            current_page = 1

        self.items = all_item
        self.current_page = current_page
        self.all_pager = all_pager
        self.show_page = show_page
        self.limit = limit
        self.search = search_filter

    @property
    def start(self):
        return (self.current_page - 1) * self.limit

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

    def show_pagination(self, baseurl):
        list_page = []

        # 上一页
        last_page = '<a href="%s?%s">上一页</a>' % (baseurl, urlencode(self.last_page()))
        list_page.append(last_page)
        if self.all_pager < self.show_page:
            s = 1
            t = self.all_pager
        else:
            if self.current_page <= int(math.ceil(self.show_page / 2.0)):
                s = 1
                t = self.show_page
            elif self.current_page > int(math.ceil(self.show_page / 2.0)):
                if self.current_page + self.show_page / 2 > self.all_pager:
                    s = self.all_pager - self.show_page
                    t = self.all_pager
                else:
                    s = self.current_page - self.show_page / 2
                    t = self.current_page + self.show_page / 2

        for p in range(s, t + 1):
            if p == self.current_page:
                tmp = '<a class="active" href="%s?%s">%s</a>' % (baseurl, urlencode(self.search), p)
            else:
                self.search['page'] = p
                tmp = '<a href="%s?%s">%s</a>' % (baseurl, urlencode(self.search), p)
            list_page.append(tmp)

        # 下一页
        next_page = '<a href="%s?%s">下一页</a>' % (baseurl, urlencode(self.next_page()))
        list_page.append(next_page)

        # 跳转到
        jump = """<input type="text" class='pager_input' onkeyup="value=value.replace(/[^\d]/g, '')"/>
        <a onclick="Jump('%s',this);">GO</a>""" % (baseurl,)
        script = """<script>
                    function Jump(baseUrl,ths){
                        var val = ths.previousElementSibling.value;
                        if(val.trim().length>0){
                            location.href = baseUrl+ "?%s".replace(/page=\d+/g,'page=' +val);
                        }
                    }
                    </script>
                """% (urlencode(self.search))
        list_page.append(jump)
        list_page.append(script)
        return "".join(list_page)

    def current_list_info(self):
        current_list = self.items[self.start:self.end]
        return current_list

    def last_page(self):
        if self.current_page > 1:
            self.search['page'] = self.current_page - 1
        else:
            self.search['page'] = 1
        return self.search

    def next_page(self):
        if self.current_page < self.all_pager:
            self.search['page'] = self.current_page + 1
        else:
            self.search['page'] = self.all_pager
        return self.search

handler

class IndexHandler(AppBaseHandler):
    def get(self, *args, **kwargs):
        # self.render('index.html')
        try:
            params = Schema({
                Optional("page", default=1): Use(int),
                Optional("limit", default=10): Use(int),
                Optional("sort", default='id'): Use(str),
            }).validate(self.get_params())
        except SchemaError as e:
            return self.response_help(statuscode="401", status_msg=e)
        page = params['page']
        limit = params['limit']
        all_items = [{'id': i + 1, "name": "maotai", "email": "123456"} for i in range(300)]
        page_obj = Pagination({'page':page}, all_items, limit, 5)
        current_list = page_obj.current_list_info()
        str_page = page_obj.show_pagination("")
        self.render("Test.html", list_info=current_list, current_page=page, str_page=str_page)

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Test</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>
<table class="table" width="40%">
    <thead>
    <tr>
        <th>id</th>
        <th>名称</th>
        <th>简介</th>
    </tr>
    </thead>
    <tbody>
    {% for line in list_info %}
    <tr>
        {% block success %}
        <td>{{ line['id'] }}</td>
        <td>{{ line['name'] }}</td>
        <td>{{ line['email'] }}</td>
        {% end %}
    </tr>
    {% end %}
    </tbody>
</table>

<div class = "pager">
    <!--{{str_page}}-->
    {% raw str_page %}
</div>
</body>
</html>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,540评论 25 708
  • 睁开眼睛 阳光早已被厚厚窗帘挡在外面 外面车水马龙熙熙攘攘好生热闹 我疑似被隔绝 新一天开始每个人脸上洋溢笑脸苦瓜...
    林咸鱼阅读 129评论 0 0
  • 喜欢狗狗, 或许是因为流浪太久, 一种情绪的寄托。 大街小巷里那么多狗狗, 我们都是陌生的遇见, 彼此毫无相干。 ...
    心羽自心阅读 218评论 0 1
  • 【每日精进打卡第70天】 姓名:张晓雪 公司:淮安市金鸡喜满堂食品有限公司 349期六项精进(南京)乐观二组学员 ...
    我怕我忘记你_6e63阅读 455评论 0 0
  • 20171209星期六 礼拜六不上学,早晨起来的时候也没叫醒子涵,让她睡到自然醒吧。下午和往常一样去学舞蹈,四点我...
    子涵的妈妈阅读 262评论 0 0

友情链接更多精彩内容