python-django-自定义分页

Posted godlv

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-django-自定义分页相关的知识,希望对你有一定的参考价值。

自定义分页,复制引入即可用

 

 1 class Pagination(object):
 2     def __init__(self,totalCount,currentPage,perPageItemNum=10,maxPageNum=7):
 3         # 数据总个数
 4         self.total_count = totalCount
 5         # 当前页
 6         try:
 7             v = int(currentPage)
 8             if v <= 0:
 9                v = 1
10             self.current_page = v
11         except Exception as e:
12             self.current_page = 1
13         # 每页显示的行数
14         self.per_page_item_num = perPageItemNum
15         # 最多显示页面
16         self.max_page_num = maxPageNum
17 
18     def start(self):
19         return (self.current_page-1) * self.per_page_item_num
20 
21     def end(self):
22         return self.current_page * self.per_page_item_num
23     @property
24     def num_pages(self):
25         """
26         总页数
27         :return:
28         """
29         # 666
30         # 10
31         a,b = divmod(self.total_count,self.per_page_item_num)
32         if b == 0:
33             return a
34         return a+1
35 
36     def pager_num_range(self):
37         # self.num_pages()
38         # self.num_pages
39         # 当前页
40         #self.current_page
41         # 最多显示的页码数量 11
42         #self.per_pager_num
43         # 总页数
44         # self.num_pages
45         if self.num_pages < self.max_page_num:
46             return range(1,self.num_pages+1)
47         # 总页数特别多 5
48         part = int(self.max_page_num/2)
49         if self.current_page <= part:
50             return range(1,self.max_page_num+1)
51         if (self.current_page + part) > self.num_pages:
52             return range(self.num_pages-self.max_page_num+1,self.num_pages+1)
53         return range(self.current_page-part,self.current_page+part+1)
54 
55     def page_str(self):
56         page_list = []
57 
58         first = "<li><a href=‘/fenye2.html?p=1‘>首页</a></li>"
59         page_list.append(first)
60 
61         if self.current_page == 1:
62             prev = "<li><a href=‘#‘>上一页</a></li>"
63         else:
64             prev = "<li><a href=‘/fenye2.html?p=%s‘>上一页</a></li>" %(self.current_page-1,)
65         page_list.append(prev)
66         for i in self.pager_num_range():
67             if i == self.current_page:
68                 temp = "<li class=‘active‘><a href=‘/fenye2.html?p=%s‘>%s</a></li>" %(i,i)
69             else:
70                 temp = "<li><a href=‘/fenye2.html?p=%s‘>%s</a></li>" % (i, i)
71             page_list.append(temp)
72 
73         if self.current_page == self.num_pages:
74             nex = "<li><a href=‘#‘>下一页</a></li>"
75         else:
76             nex = "<li><a href=‘/fenye2.html?p=%s‘>下一页</a></li>" % (self.current_page + 1,)
77         page_list.append(nex)
78 
79         last = "<li><a href=‘/fenye2.html?p=%s‘>尾页</a></li>" %(self.num_pages,)
80         page_list.append(last)
81 
82         return ‘‘.join(page_list)

调用pager.py

views.py

1 def FenYe(request):
2     from pager import Pagination
3     current_page = request.GET.get(p)
4     page_obj = Pagination(666, current_page)#参数:totalCount,currentPage,perPageItemNum,maxPageNum
5 
6     data_list = USER_LIST[page_obj.start():page_obj.end()]
7     return render(request, fenye.html, {data: data_list, page_obj: page_obj})

fenye.html

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>自定制分页</title>
 6 
 7     <link rel="stylesheet" href="/static/plugins/bootstrap/css/bootstrap.css">
 8 </head>
 9 <body>
10 <ul>
11     {% for row in data %}
12         <li>{{ row.name }}-{{ row.age }}</li>
13     {% endfor %}
14 </ul>
15 {% for i in page_obj.pager_num_range %}
16     <a href="/自定制分页.html?p={{ i }}">{{ i }}</a>
17 {% endfor %}
18 <hr/>
19 
20 <ul class="pagination pagination-sm">
21     {{ page_obj.page_str|safe }}
22 </ul>
23 <div style="height: 300px;"></div>
24 </body>
25 </html>

 

以上是关于python-django-自定义分页的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——CSS选择器

python-django 模型model字段类型说明

VSCode自定义代码片段6——CSS选择器

VSCode自定义代码片段(vue主模板)

VSCode自定义代码片段——声明函数

VSCode自定义代码片段——.vue文件的模板