zoukankan      html  css  js  c++  java
  • django 分页

    已经封装成包,使用时导入即可

    实现:

    class MyPage:
        def __init__(self, url, info_count, page_num, info_num=10, max_page=11, ):
            """
            :param url: 请求的url
            :param info_count: 总共有多少条数据
            :param page_num: 访问的页码
            :param info_num: 展示多少条数据
            :param max_page: 展示多少条页码
            """
    
            self.url = url
            self.info_count = info_count
            try:
                page_num = int(page_num)
            except Exception as e:
                page_num = 1
            self.info_num = info_num
            self.page_num = page_num
            self.max_page = max_page
            page_count, m = divmod(self.info_count, self.info_num)
            if m:
                page_count += 1
                self.page_count = page_count
            else:
                self.page_count = page_count
    
            start_info = (self.page_num - 1) * self.info_num
            end_info = start_info + self.info_num
    
            self.start_info = start_info
            self.end_info = end_info
    
            half_max_page = self.max_page // 2
            start_page = self.page_num - half_max_page  # 开始页码
            end_page = self.page_num + half_max_page  # 结束页码
    
            # 如果可以显示的页码总数少于设置的展示页码数,展示的页码数默认为可以显示的页码总数
            if self.page_count < self.max_page:
                self.start_page = 1
                self.max_page = self.page_count
    
            # 如果开始页码小于1,则开始页码为1 , 结束页码为最可以显示的页码数
            if start_page < 1:
                start_page = 1
                end_page = self.max_page
    
            # 如果结束页码大于页码总数,则结束页码为页码总数,开始页码则为页码总数减去规定的可以显示的页码数+1
            if end_page > page_count:
                end_page = page_count
                start_page = end_page - self.max_page + 1
    
            self.start_page = start_page
            self.end_page = end_page
    
        @property
        def start(self):
            return self.start_info
    
        @property
        def end(self):
            return self.end_info
    
        def page_html(self):
            info_list = []
            # 添加一个首页标签
            first_page = '<li><a href="{}?next=1">首页</a></li>'.format(self.url)
            info_list.append(first_page)
    
            # 添加一个上一页标签,如果是第一页,标签不能点击
            if self.page_num <= 1:
                next_page = '<li class="disabled"><a href="{}?next={}" aria-abel="Previous"><spanaria-hidden="true">&laquo;</span></a></li>'.format(self.url,
                    self.page_num)
                info_list.append(next_page)
            else:
                next_page = '<li><a href="{}?next={}" aria-abel="Previous"><spanaria-hidden="true">&laquo;</span></a></li>'.format(self.url, self.page_num - 1)
                info_list.append(next_page)
    
            for i in range(self.start_page, self.end_page + 1):
                li = '<li><a href="{}?next={}">{}</a></li>'.format(self.url, i, i)
                info_list.append(li)
    
            # 添加一个下一页标签,如果是最后一页,标签不能点击
            if self.page_num == self.page_count:
                next_page = '<li class="disabled"><a href="{}?next={}"><span aria-hidden="true">&raquo;</span></a></li>'.format(self.url, self.page_num)
                info_list.append(next_page)
            else:
                next_page = '<li><a href="{}?next={}"><span aria-hidden="true">&raquo;</span></a></li>'.format(self.url, self.page_num + 1)
                info_list.append(next_page)
    
            # 添加一个尾页标签
            trailer_page = '<li><a href="{}?next={}">尾页</a></li>'.format(self.url, self.page_count)
            info_list.append(trailer_page)
            
            str_info_list = ''.join(info_list)  # 将存有页数的HTML标签列表转换成字符串形式
            return str_info_list
    分页

    用法:

    # 导入源码包 
    def show_book(request):
        # all_book = models.Book.objects.all()
        # return render(request, 'show/show_book.html', {'all_book': all_book})
        # 总共有多少条数据
        info_count = models.Book.objects.all().count()
        # 获取页码,默认为1
        page_num = request.GET.get('next', 1)
        # 获取客户端url地址,不包括域名
        url = request.path_info
        # 创建分页对象
        obj_page = paging.MyPage(url=url, info_count=info_count, page_num=page_num, info_num=8, max_page=7)
        # 展示哪些条数据
        info = models.Book.objects.all()
        all_book = info[obj_page.start:obj_page.end]
        # 获取分页HTML代码
        str_info_list = obj_page.page_html()
        return render(request, 'show/show_book.html', {'all_book': all_book, 'str_info_list': str_info_list})
    paging.py
                    <nav aria-label="Page navigation">
                        <ul class="pagination">
                            {{ str_info_list|safe }}
                        </ul>
                    </nav>
    HTML

    进阶:实现url地址中的搜索条件不会被清空,再添加一个参数即可,值为request.GET,对应标签地址应该重构。其余使用方法一致

    import copy
    class MyPage:
        def __init__(self, url, info_count, page_num, request_get_params, info_num=10, max_page=11, ):
            """
            :param url: 请求的url
            :param info_count: 总共有多少条数据
            :param page_num: 访问的页码
            :param info_num: 展示多少条数据
            :param max_page: 展示多少条页码
            :param request_get_params: 用于url中的筛选条件不清空,以request.GET传入
            """
    
            self.url = url
            self.info_count = info_count
            try:
                page_num = int(page_num)
            except Exception as e:
                page_num = 1
    
    
            self.info_num = info_num
            self.page_num = page_num
            self.max_page = max_page
            page_count, m = divmod(self.info_count, self.info_num)
            if m:
                page_count += 1
                self.page_count = page_count
            else:
                self.page_count = page_count
    
            start_info = (self.page_num - 1) * self.info_num
            end_info = start_info + self.info_num
    
            self.start_info = start_info
            self.end_info = end_info
    
            half_max_page = self.max_page // 2
            start_page = self.page_num - half_max_page  # 开始页码
            end_page = self.page_num + half_max_page  # 结束页码
    
            # 如果可以显示的页码总数少于设置的展示页码数,展示的页码数默认为可以显示的页码总数
            if self.page_count < self.max_page:
                self.start_page = 1
                self.max_page = self.page_count
    
            # 如果开始页码小于1,则开始页码为1 , 结束页码为最可以显示的页码数
            if start_page < 1:
                start_page = 1
                end_page = self.max_page
    
            # 如果结束页码大于页码总数,则结束页码为页码总数,开始页码则为页码总数减去规定的可以显示的页码数+1
            if end_page > page_count:
                end_page = page_count
                start_page = end_page - self.max_page + 1
    
            self.start_page = start_page
            self.end_page = end_page
    
            params = copy.deepcopy(request_get_params)
            params._mutable = True
            self.params = params
    
    
    
        @property
        def start(self):
            return self.start_info
    
        @property
        def end(self):
            return self.end_info
    
        def page_html(self):
            info_list = []
            # 添加一个首页标签
            self.params["next"] = 1
            first_page = '<li><a href="{}?{}">首页</a></li>'.format(self.url, self.params.urlencode())
            info_list.append(first_page)
    
            # 添加一个上一页标签,如果是第一页,标签不能点击
            if self.page_num <= 1:
                next_page = '<li class="disabled"><a href="{}?{}" aria-abel="Previous"><spanaria-hidden="true">&laquo;</span></a></li>'.format(
                    self.url,
                    self.params.urlencode())
                info_list.append(next_page)
            else:
                self.params["next"] = self.page_num - 1
                next_page = '<li><a href="{}?{}" aria-abel="Previous"><spanaria-hidden="true">&laquo;</span></a></li>'.format(
                    self.url, self.params.urlencode())
                info_list.append(next_page)
    
            for i in range(self.start_page, self.end_page + 1):
                self.params["next"] = i  # 第一次进来self.params为空,需要添加一个页码键值对
                # li = '<li><a href="{}?next={}">{}</a></li>'.format(self.url, i, i)
                li = '<li><a href="{}?{}">{}</a></li>'.format(self.url, self.params.urlencode(), i)
                info_list.append(li)
    
            # 添加一个下一页标签,如果是最后一页,标签不能点击
            if self.page_num == self.page_count:
                next_page = '<li class="disabled"><a href="{}?{}"><span aria-hidden="true">&raquo;</span></a></li>'.format(
                    self.url, self.params.urlencode())
                info_list.append(next_page)
            else:
                self.params["next"] = self.page_num + 1
                next_page = '<li><a href="{}?{}"><span aria-hidden="true">&raquo;</span></a></li>'.format(self.url,
                                                                                                          self.params.urlencode())
                info_list.append(next_page)
    
            # 添加一个尾页标签
            self.params["next"] = self.page_count
            trailer_page = '<li><a href="{}?{}">尾页</a></li>'.format(self.url, self.params.urlencode())
            info_list.append(trailer_page)
    
            str_info_list = ''.join(info_list)  # 将存有页数的HTML标签列表转换成字符串形式
            return str_info_list
    分页
  • 相关阅读:
    NSLocalizedString用法
    4-27学习心得
    手势学习
    plist处理
    数据存储
    initWithFrame方法
    控制器跳转小常识
    UIGestureRecognizer学习笔记
    博客资源
    检测手机wifi有没有打开
  • 原文地址:https://www.cnblogs.com/aizhinong/p/12253018.html
Copyright © 2011-2022 走看看