• Django自定义分页类的封装


     1.自定义分页类的封装:

     1 class Pagination(object):
     2     """
     3     基于bootstrap样式的自定义分页类的封装
     4     """
     5     # page_num为每页显示的数量,max_page_num为每页显示的总页码数
     6     def __init__(self, request, lengths, page_num=10, max_page_num=7):
     7 
     8         # 首先进行异常错误处理,比如:.../?page=-5等
     9         try:
    10             # 获取url中的page值,并将默认值设置为1
    11             page = int(request.GET.get('page', 1))
    12             # print(page, type(page))
    13             if page < 1:
    14                 page = 1
    15         except Exception:
    16             page = 1
    17 
    18         # 每页显示的数量
    19         # page_num = 7
    20 
    21         # 计算总页码数
    22         # divmod为len(user_list) / page_num,整数为total_num,余数为remainder
    23         total_num, remainder = divmod(lengths, page_num)
    24         if remainder != 0:
    25             total_num += 1
    26 
    27         # 每页显示的总页码数
    28         # max_page_num = 7
    29 
    30         # 每页显示总页码数一半数
    31         half_num = max_page_num // 2
    32         # 实际总页码数 < 页面总页码数
    33         if total_num < max_page_num:
    34             # 页码起始值
    35             page_start = 1
    36             # 页码终止值
    37             page_end = total_num
    38         # 实际总页码数 > 页面总页码数
    39         else:
    40             # 处理左边极值
    41             if page - half_num < 1:
    42                 page_start = 1
    43                 page_end = max_page_num
    44             # 处理右边极值
    45             elif page + half_num > total_num:
    46                 page_start = total_num - max_page_num + 1
    47                 page_end = total_num
    48             else:
    49                 page_start = page - half_num
    50                 page_end = page + half_num
    51 
    52         html_list = ['<nav aria-label="Page navigation"><ul class="pagination pagination-lg">']
    53 
    54         if page == 1:
    55             html_list.append(
    56                 '<li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>')
    57         else:
    58             html_list.append(
    59                 '<li><a href="?page=%s" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>' % (page - 1))
    60 
    61         for i in range(page_start, page_end + 1):
    62             if page == i:
    63                 html_list.append('<li class="active"><a href="?page=%s">%s</a></li>' % (i, i))
    64             else:
    65                 html_list.append('<li><a href="?page=%s">%s</a></li>' % (i, i))
    66 
    67         if page == total_num:
    68             html_list.append(
    69                 '<li class="disabled"><a href="#" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>')
    70         else:
    71             html_list.append(
    72                 '<li><a href="?page=%s" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>' % (
    73                         page + 1))
    74 
    75         html_list.append('</ul></nav>')
    76 
    77         self.html_list = ''.join(html_list)
    78 
    79         # 起始
    80         # start = 0
    81         self.start = (page - 1) * page_num
    82 
    83         # 终止
    84         # end = 7
    85         self.end = page * page_num

    2.后端调用

    1  def GoodType(request): 
    2     resp_data = {}
    3     g_type = GoodsType.objects.all()
    4     page = Pagination(request,lengths=g_type.count(),page_num=5)
    5     resp_data['g_type'] =g_type[page.start:page.end]
    6     resp_data['page_html'] = page.html_list
    7     return render(request, 'goods/goods_type.html', resp_data)

    3.前端使用

    1   <div class="row" style="margin-right: 0">{{ page_html|safe }}</div>

    效果展示:

    参考博客:戳这里

    天青色等烟雨而我在等你!
  • 相关阅读:
    4.net基础之委托事件
    2.net基础之反射
    绕过百度网盘速度限制直接下载百度网盘文件
    1.net基础之泛型
    网页图片按需加载
    小米官网图片轮播
    html+css3实现网页时钟
    接口自动化测试方案详解
    接口测试用例设计实践总结
    Mysql 高可用(MHA)-读写分离(Atlas)
  • 原文地址:https://www.cnblogs.com/Liu928011/p/15122452.html
Copyright © 2020-2023  润新知