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 = ['')
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>

效果展示:

参考博客:戳这里