• Django自定义分页插件Pager


    一、custom.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <link rel="stylesheet" href="/static/plugins/bootstrap-3.3.7-dist/css/bootstrap.css">
        <link rel="stylesheet" href="/static/plugins/font-awesome-4.7.0/css/font-awesome.css">
    </head>
    <body>
        <h1>用户列表</h1>
        <table  class="table table-striped table table-bordered table table-hover">
                <tr>
                    <td>姓名</td>
                    <td>年龄</td>
                    <td>地址</td>
                </tr>
            {% for row in user_list %}
                <tr>
                    <td>{{ row.username }}</td>
                    <td>{{ row.age }}</td>
                    <td>{{ row.address }}</td>
                </tr>
            {% endfor %}
    
        </table>
        <nav aria-label="Page navigation">
            <ul class="pagination">
              {{ page_info.pager|safe }}
            </ul>
        </nav>
    </body>
    </html>

    二、view.py下的函数

    def custom(request):
        # 获取路径信息
        url = request.META['PATH_INFO']
        # 得到数据条数
        all_count = models.UserInfo.objects.all().count()
        # 创建Pager对象
        page_info = Pager(request.GET.get('page'), all_count, 10, url)
        # 获取当前页需要的User对象数组
        user_list = models.UserInfo.objects.all()[page_info.start():page_info.end()]
        print(page_info.start(), page_info.end())
        for u in user_list:
            print(u.username)
        return render(request, 'custom.html', {'user_list': user_list, 'page_info': page_info})

    三、Pager插件

    class Pager(object):
        def __init__(self, current_page, data_count, page_size, base_url, show_page=5):
            """
            :param current_page:    当前页
            :param data_count:      数据行总数
            :param page_size:       页大小(每一页包含的数据行数)
            :param base_url:        跳转页面的url
            :param show_page:       需要显示的页数
            """
    
            self.data_count = data_count
            self.page_size = page_size
            self.base_url = base_url
            self.all_page = (self.data_count + self.page_size - 1) // self.page_size
            self.show_page = self.all_page if show_page > self.all_page else show_page
            try:
                self.current_page = int(current_page)
            except Exception as e:
                self.current_page = 1
    
        def start(self):
            """
            :return: 数据起始位置
            """
            print("页大小:" + str(self.page_size) + "--当前页: " + str(self.current_page))
            return self.page_size * (self.current_page - 1)
    
        def end(self):
            """
            :return: 数据末尾位置
            """
            return self.page_size * self.current_page
        def pageList(self):
            start, end = 1, self.show_page + 1
            half_show_page = (self.show_page - 1) // 2
    
            if half_show_page < self.current_page < self.all_page - half_show_page:
                start = self.current_page - half_show_page
                end = self.current_page + half_show_page + 1
                # > 10 - 2
            elif self.current_page >= self.all_page - half_show_page:
                end = self.all_page + 1
                start = end - self.show_page
            return [i for i in range(start, end)]
    
        def pager(self):
            # 组装‘上一页’选项
            page_list = []
            if self.current_page <= 1:
                prev = "<li><a href='#'>上一页</a></li>"
            else:
                prev = "<li><a href='%s?page=%s'>上一页</a></li>" % (self.base_url, self.current_page - 1,)
            page_list.append(prev)
    
            # 组装中间页码数显示
            for i in self.pageList():
                if i == self.current_page:
                    temp = "<li class='active'><a  href='%s?page=%s'>%s</a></li>" % (self.base_url, i, i,)
                else:
                    temp = "<li><a href='%s?page=%s'>%s</a></li>" % (self.base_url, i, i,)
                page_list.append(temp)
    
            # 组装'下一页'选项
            if self.current_page >= self.all_page:
                nex = "<li><a href='#'>下一页</a></li>"
            else:
                nex = "<li><a href='%s?page=%s'>下一页</a></li>" % (self.base_url, self.current_page + 1,)
            page_list.append(nex)
            return ''.join(page_list)
  • 相关阅读:
    linux crontab 定时使用方法
    crontab 选择编辑器 select-editor
    设置定时任务为每天凌晨2点执行和每小时执行一次
    性能测试工具--SIEGE安装及使用简介 siege压力测试
    Vue基础
    使用 supervisor 管理进程
    长按listview弹出选项列表对话框
    左右滑动弹窗之间短信内容区域来显示上一条和下一条短信
    在开机广播中启动服务
    Android spinner 样式及其使用详解
  • 原文地址:https://www.cnblogs.com/854594834-YT/p/13818142.html
Copyright © 2020-2023  润新知