Custom paging (+ Advanced Function class encapsulates lower Edition)

Premium class encapsulates:

  1  # custom paging: paging pattern employed on Bootstrap 
  2  class PageNation:
   . 3      DEF  the __init__ (Self, the base_url, current_page_num, TOTAL_COUNTS, Request, per_page_counts = 10, page_number =. 5 ):
   . 4          '' ' 
  . 5          : param the base_url: tab placement information the base path
   . 6          : param current_page_num: this page page
   . 7          : param TOTAL_COUNTS: total amount of data
   . 8          : param per_page_counts: amount of data per display
   . 9          : param page_number: page number display
 10          '' ' 
. 11          self.base_url = the base_url
 12 is          Self = .current_page_num current_page_num
 13         self.total_counts = total_counts
 14         self.per_page_counts = per_page_counts
 15         self.page_number = page_number
 16         self.request=request
 17         import copy
 18         self.params = copy.deepcopy(self.request.GET)
 19         try:
 20             self.current_page_num = int(self.current_page_num)
 21          except Exception:
 22             self.current_page_num = 1
 23          half_page_range = self.page_number // 2
 24         # 计算总页数
 25         # self.page_number_count, a = divmod(self.total_counts, self.per_page_counts)
 26         # if self.current_page_num < 1:
 27         #     self.current_page_num = 1
 28         # if a:
 29         #     self.page_number_count += 1
 30          import math
 31         self.page_number_count=math.ceil(self.total_counts/self.per_page_counts)
 32         if self.current_page_num < 1:
 33             self.current_page_num = 1
 34          if self.current_page_num > self.page_number_count:
 35             self.current_page_num = self.page_number_count
 36         if self.page_number_count <= self.page_number:
 37             self.page_start = 1
 38             self.page_end = self.page_number_count
 39         else:
 40             if self.current_page_num <= half_page_range:
 41                 self.page_start = 1
 42                 self.page_end = page_number
 43             elif self.current_page_num + half_page_range >= self.page_number_count:
 44                 self.page_start = self.page_number_count - self.page_number + 1
 45                 self.page_end = self.page_number_count
 46             else:
 47                 self.page_start = self.current_page_num - half_page_range
 48                 self.page_end = self.current_page_num + half_page_range
 49      #数据切片依据,起始位置
 50     @property
 51     def start_num(self):
 52         if self.current_page_num==0:
 53             self.current_page_num=1
 54         start_num = (self.current_page_num - 1) * self.per_page_counts
 55         return start_num
 56      #数据切片依据,终止位置
 57     @property
 58     def end_num(self):
 59         end_num = self.current_page_num * self.per_page_counts
 60         return end_num
 61      # 拼接HTMl标签
 62     def page_html(self):
 63         tab_html = ''
 64         tab_html += '<nav aria-label="Page navigation" class="pull-right"><ul class="pagination">'
 65         # 页码
 66         tab_html += f'<li><span aria-hidden="true" diabled>{self.current_page_num}/{self.page_number_count}</span></li>'
 67         #首页
 68         self.params['page'] = 1
 69         first_page='<li><a href="{0}?{1}"  ><span aria-hidden="true">首页</span></a></li>'.format(self.base_url, self.params.urlencode())
 70          tab_html+=first_page
 71         # 上一页
 72          if self.current_page_num == 1:
 73             previous_page = '<li disabled><a href="#" aria-label="Previous" ><span aria-hidden="true">&laquo;</span></a></li>'
 74         else:
 75             self.params['page'] = self.current_page_num - 1
 76             previous_page = '<li><a href="{0}?{1}" aria-label="Previous" ><span aria-hidden="true">&laquo;</span></a></li>'.format(
 77                 self.base_url, self.params.urlencode())
 78         tab_html += previous_page
 79         #数字页码
 80         for i in range(self.page_start, self.page_end + 1):
 81              # if self.current_page_num == i:         
 82             #     one_tag = '<li class="active"><a href="{0}?page={1}">{1}</a></li>'.format(self.base_url, i)
 83             # else:
 84             #     one_tag = '<li><a href="{0}?page={1}">{1}</a></li>'.format(self.base_url, i)
 85             # tab_html += one_tag
 86              self.params['page'] = i
 87             if self.current_page_num == i:
 88                  one_tag = '<li class="active"><a href="{0}?{2}">{1}</a></li>'.format(self.base_url, i,self.params.urlencode())
 89             else:
 90                 one_tag = '<li><a href="{0}?{2}">{1}</a></li>'.format(self.base_url, i,self.params.urlencode())
 91             tab_html += one_tag
 92          # 下一页
 93          if self.current_page_num == self.page_number_count:
 94             next_page = '<li disabled><a href="#" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>'
 95         else:
 96             self.params['page'] = self.current_page_num + 1
 97             next_page = '<li><a href="{0}?{1}" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>'.format(self.base_url, self.params.urlencode())
 98         tab_html += next_page
 99          # 最后页
100         self.params['page'] = self.page_number_count
101         first_page = '<li><a href="{0}?{1}"  ><span aria-hidden="true">尾页</span></a></li>'.format(self.base_url,self.params.urlencode())
102         tab_html += first_page
103          # 总数据
104         tab_html += f'<li><span aria-hidden="true">共{self.total_counts}条</span></li>'
105          tab_html += '</ul></nav>'
106          return tab_html

Low-level function version:

1   # function lower plate 
2  DEF pagenation (the base_url, current_page_num, TOTAL_COUNTS, per_page_counts = 10, = page_number. 5 ):
 . 3      '' ' 
. 4      Number of data TOTAL_COUNTS
 . 5      per_page_counts page number of data points
 . 6      page_number = page number display
 . 7      current_page_num current p
 . 8      : return:
 . 9      '' ' 
10      # all_objs_list models.Customer.objects.all = () 
. 11      # TOTAL_COUNTS = all_objs_list.count () 
12 is      # page_number. 5 = 
13 is      the try :
 14          current_page_num = int(current_page_num)
15     except Exception:
16         current_page_num = 1
17     half_page_range = page_number//2
18     #计算总页数
19     page_number_count,a = divmod(total_counts,per_page_counts)
20     if current_page_num < 1:
21         current_page_num = 1
22     if a:
23         page_number_count += 1
24     if current_page_num > page_number_count:
25         current_page_num = page_number_count
26     start_num = (current_page_num - 1) * 10
27     end_num = current_page_num * 10
28     if page_number_count <= page_number:
29         page_start = 1
30         page_end = page_number_count
31     else:
32         if current_page_num <= half_page_range:
33             page_start = 1
34             page_end = page_number
35         elif current_page_num + half_page_range  >= page_number_count:
36             page_start = page_number_count - page_number + 1
37             page_end = page_number_count
38         else:
39             page_start = current_page_num - half_page_range
40             page_end = current_page_num + half_page_range
41     #拼接HTMl标签
42     tab_html = ''
43     tab_html += '<nav aria-label="Page navigation"><ul class="pagination">'
44     #上一页
45      if current_page_num == 1:
46         previous_page = '<li disabled><a href="#" aria-label="Previous" ><span aria-hidden="true">&laquo;</span></a></li>'
47     else:
48         previous_page = '<li><a href="{0}?page={1}" aria-label="Previous" ><span aria-hidden="true">&laquo;</span></a></li>'.format(base_url,current_page_num-1)
49     tab_html += previous_page
50     for i in range(page_start,page_end+1):
51         if current_page_num == i: 
52             one_tag = '<li class="active"><a href="{0}?page={1}">{1}</a></li>'.format(base_url,i)
53         else:
54             one_tag = '<li><a href="{0}?page={1}">{1}</a></li>'.format(base_url, i)
55         tab_html += one_tag
56   
57     #下一页
58     if current_page_num == page_number_count:
59         next_page = '<li disabled><a href="#" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>'
60     else:
61         next_page = '<li><a href="{0}?page={1}" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>'.format(base_url,current_page_num+1)
62     tab_html+=next_page
63     tab_html += '</ul></nav>'
64     return tab_html,start_num,end_num

 

Guess you like

Origin www.cnblogs.com/open-yang/p/11223431.html