分页框架

 1 class PageInfo:
 2     def __init__(self,page_num,per_page,all_page,base_page):
 3         '''
 4         :param page_num: 当前页
 5         :param per_page: 每页数据数量
 6         :param all_page: 总数据量
 7         :param base_page: 固定页数
 8         '''
 9         try:
10             self.page_num = int(page_num)
11         except Exception as e:
12             self.page_num = 1
13         self.per_page = int(per_page)
14         self.all_page = all_page
15         self.base_page = base_page
16 
17     def start(self):
18         return (self.page_num - 1) * self.per_page
19 
20     def end(self):
21         return self.page_num * self.per_page
22 
23     #总页数函数(总数据/每页条数)
24     def total_pages(self):
25         a,b = divmod(self.all_page,self.per_page)
26         if b:
27             a = a+1
28         return a
29 
30     def pager(self):
31         page_list = []
32         harf = divmod(self.base_page, 2)[0]
33         #如果总页数小于固定分页
34         if self.total_pages() <= self.base_page:
35             begin = 0
36             end = self.total_pages()
37         #如果当前页 + 固定页的一半大于总页数
38         elif self.page_num + harf >= self.total_pages():
39             begin = self.total_pages() - self.base_page + 1
40             end = self.total_pages()
41         #如果当前页小于harf+1
42         elif self.page_num < harf+1:
43             begin = 1
44             end = self.base_page
45         else:
46             begin = self.page_num - harf
47             end = self.page_num +harf
48 
49         #上一页
50         if self.page_num <= 1:
51             prev = '<li><a href="#">上一页</a></li>'
52         else:
53             prev = '<li><a href="?p=%s">上一页</a></li>'%(self.page_num - 1)
54         page_list.append(prev)
55 
56         for i in range(begin , end + 1):
57             if i == self.page_num:
58                 temp = '<li class="active"><a href="?p=%s">%s</a></li>' % (i, i)
59             else:
60                 temp = '<li><a href="?p=%s">%s</a></li>' % (i, i)
61             page_list.append(temp)
62 
63         # 下一页
64         if self.page_num >= self.total_pages():
65             prev = '<li><a href="#">下一页</a></li>'
66         else:
67             prev = '<li><a href="?p=%s">下一页</a></li>' % (self.page_num + 1)
68         page_list.append(prev)
69 
70         return page_list
71 
72 def custom(request):
73     page_num = request.GET.get('p') #当前页
74     all_page = models.UserInfo.objects.all().count()
75     # 实例化一个page_info对象
76     page_info = PageInfo(page_num,10,all_page,11)
77     user_list = models.UserInfo.objects.all()[page_info.start():page_info.end()]
78     return render(request,'custom.html',{'user_list':user_list,'page_list':page_info.pager()})

HTML代码:

<label for="">
    {% for row in user_list %}
        <li>{{ row.id }},{{ row.name }},{{ row.age }}</li>
    {% endfor %}

    <nav aria-label="Page navigation">
        <ul class="pagination">
                {% for page in page_list %}
                    {{ page |safe }}
                {% endfor %}
        </ul>
    </nav>
</label>

猜你喜欢

转载自www.cnblogs.com/mkdabc/p/10437472.html