• 介绍&代码


    之前参考前辈实现的分页组件,还ok。

    介绍:

      基于Web,实现分页样式 和 控制页面内容数据的展示形式。

    实现:

     1 from django.utils.safestring import mark_safe
     2 
     3 class Pagination(object):
     4     def __init__(self, current_page, all_count, base_url, query_params, per_page=20, pager_page_count=11):
     5         """
     6         分页初始化
     7         :param current_page: 当前页码
     8         :param per_page: 每页显示数据条数
     9         :param all_count: 数据库中总条数
    10         :param base_url: 基础URL
    11         :param query_params: QueryDict对象,内部含所有当前URL的原条件
    12         :param pager_page_count: 页面上最多显示的页码数量
    13         """
    14         self.base_url = base_url
    15         try:
    16             self.current_page = int(current_page)
    17             if self.current_page <= 0:
    18                 raise Exception()
    19         except Exception as e:
    20             self.current_page = 1
    21         self.query_params = query_params
    22         self.per_page = per_page
    23         self.all_count = all_count
    24         self.pager_page_count = pager_page_count
    25         pager_count, b = divmod(all_count, per_page)
    26         if b != 0:
    27             pager_count += 1
    28         self.pager_count = pager_count
    29 
    30         half_pager_page_count = int(pager_page_count / 2)
    31         self.half_pager_page_count = half_pager_page_count
    32 
    33     @property
    34     def start(self):
    35         """
    36         数据获取值起始索引
    37         :return:
    38         """
    39         return (self.current_page - 1) * self.per_page
    40 
    41     @property
    42     def end(self):
    43         """
    44         数据获取值结束索引
    45         :return:
    46         """
    47         return self.current_page * self.per_page
    48 
    49     def page_html(self):
    50         """
    51         生成HTML页码
    52         :return:
    53         """
    54         # 如果数据总页码pager_count<11 pager_page_count
    55         if self.pager_count < self.pager_page_count:
    56             pager_start = 1
    57             pager_end = self.pager_count
    58         else:
    59             # 数据页码已经超过11
    60             # 判断: 如果当前页 <= 5 half_pager_page_count
    61             if self.current_page <= self.half_pager_page_count:
    62                 pager_start = 1
    63                 pager_end = self.pager_page_count
    64             else:
    65                 # 如果: 当前页+5 > 总页码
    66                 if (self.current_page + self.half_pager_page_count) > self.pager_count:
    67                     pager_end = self.pager_count
    68                     pager_start = self.pager_count - self.pager_page_count + 1
    69                 else:
    70                     pager_start = self.current_page - self.half_pager_page_count
    71                     pager_end = self.current_page + self.half_pager_page_count
    72 
    73         page_list = []
    74 
    75         if self.current_page <= 1:
    76             prev = '<li><a href="#">上一页</a></li>'
    77         else:
    78             self.query_params['page'] = self.current_page - 1
    79             prev = '<li><a href="%s?%s">上一页</a></li>' % (self.base_url, self.query_params.urlencode())
    80         page_list.append(prev)
    81         for i in range(pager_start, pager_end + 1):
    82             self.query_params['page'] = i
    83             if self.current_page == i:
    84                 tpl = '<li class="active"><a href="%s?%s">%s</a></li>' % (
    85                     self.base_url, self.query_params.urlencode(), i,)
    86             else:
    87                 tpl = '<li><a href="%s?%s">%s</a></li>' % (self.base_url, self.query_params.urlencode(), i,)
    88             page_list.append(tpl)
    89 
    90         if self.current_page >= self.pager_count:
    91             nex = '<li><a href="#">下一页</a></li>'
    92         else:
    93             self.query_params['page'] = self.current_page + 1
    94             nex = '<li><a href="%s?%s">下一页</a></li>' % (self.base_url, self.query_params.urlencode(),)
    95         page_list.append(nex)
    96         page_str = "".join(page_list)
    97         return mark_safe(page_str)
  • 相关阅读:
    驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接
    spring 、Mybatis配置sql server数据库
    Win8安装程序出现2502、2503错误解决方法
    jsp-include 写法
    在swt中获取jar包中的文件 uri is not hierarchical
    Java调用shell脚本
    SWT自定义选项卡CTabFolder
    weblogic 生产模式和开发模式的互相转换
    or1200处理器的异常处理类指令介绍
    USACO Section 2.1 Healthy Holsteins
  • 原文地址:https://www.cnblogs.com/steven2020/p/10741229.html
Copyright © 2020-2023  润新知