西游之路——python全栈——Django内置分页及拓展

 

python---自定义分页类

 

一、views.py操作(后台数据获取)

 1 from django.shortcuts import render
 2 from django.core.paginator import Paginator,PageNotAnInteger,EmptyPage,Page
 3 
 4 USER_LIST = []
 5 for i in range(1,666):
 6     tem = {'name':'root'+str(i), 'age':i}
 7     USER_LIST.append(tem)
 8 
 9 def index(request):
10     current_page = request.GET.get('p')
11     current_page = int(current_page)
12     per_page_count = 10
13     '''
14     p=1
15     索引:0-10    取值:0-9
16     p=2
17     索引:10-20   取值:10-19
18     '''
19     start = (current_page-1)*per_page_count
20     end = current_page*per_page_count
21     data = USER_LIST[start:end]
22 
23     prev_page = current_page-1
24     next_page = current_page+1
25     return render(request, 'pager.html',{'user_list':data, 'prev_page':prev_page, 'next_page':next_page})
26 
27 # Django内置分页拓展
28 class CustomPaginator(Paginator):  # 修改类
29     def __init__(self,current_page, per_page_num,*args,**kwargs):
30         # 当前页
31         self.current_page = int(current_page)
32         # 最多显示页码数 11
33         self.per_page_num = int(per_page_num)
34         super(CustomPaginator, self).__init__(*args,**kwargs)
35 
36     def pager_num_range(self):
37         # 当前页
38         # self.current_page
39         # 最多显示页码数 11
40         # self.per_page_num
41         # 总页数
42         # self.num_pages
43         # 判断最小极值
44         if self.per_page_num > self.num_pages:
45             # 根据当前页动态生成,设置页面显示数
46             return range(1, self.num_pages + 1)
47         # 总页数特别多时
48         part = int(self.per_page_num/2)
49 
50         if part >= self.current_page:
51             return range(1, self.per_page_num + 1)
52         # 判断最大极值
53         if (self.current_page + part) >= self.num_pages:
54             return range(self.num_pages - self.per_page_num + 1, self.num_pages + 1)
55         return range(self.current_page - part, self.current_page + part +1)
56 
57 def index1(request):
58 
59     current_page = request.GET.get('p')
60     # per_page: 每页显示条目数量
61     # count:数据总个数
62     # num_pages: 总页数
63     # page_range: 总页数的索引范围,页码范围,如:(1,10),(1,200)
64     # page:page对象(是否具有上一页,是否有下一页)
65     paginator = CustomPaginator(current_page,7,USER_LIST,10)   # USER_LIST为总数据    10为每页条数
66     try:
67         posts = paginator.page(current_page)
68         # has_next              是否有下一页
69         # next_page_number      下一页页码
70         # has_previous          是否有上一页
71         # previous_page_number  上一页页码
72         # object_list           分页之后的数据列表
73         # number                当前页
74         # paginator             paginator对象
75     except PageNotAnInteger:
76         posts = paginator.page(1)
77     except EmptyPage:
78         posts = paginator.page(paginator.num_pages)
79 
80     return render(request,'index1.html',{'posts':posts})

二、HTML操作(前端代码)

    拓 展

1 <ul>
2     {% for row in posts.object_list %}
3         <li>{{row.name}}-{{row.age}}</li>
4     {% endfor %}
5 </ul>
6 
7 {# 使用include调用pager #}
8 {% include 'include/pager.html' %}

      pager.html

 1 {% if posts.has_previous %}
 2     <a href="/index1.html?p={{posts.previous_page_number}}">上一页</a>
 3 {% else %}
 4     <a href="#">上一页</a>
 5 {% endif %}
 6 <a href="/index1.html?p={{1}}">首页</a>
 7 {% for i in posts.paginator.pager_num_range %}
 8     {% if i == posts.number %}
 9         <a href="/index1.html?p={{i}}"  style="font-size: 30px;">{{i}}</a>
10     {% else %}
11         <a href="/index1.html?p={{i}}" >{{i}}</a>
12     {% endif %}
13 {% endfor %}
14 <a href="/index1.html?p={{posts.paginator.num_pages}}">尾页</a>
15 {% if posts.has_next %}
16     <a href="/index1.html?p={{posts.next_page_number}}">上一页</a>
17 {% else %}
18     <a href="#">下一页</a>
19 {% endif %}
20 <span>
21     {{posts.number}}/{{posts.paginator.num_pages}}
22 </span>

三、学习内容归纳

 1 分页组件
 2     - Django内置分页
 3         - paginator、page
 4         - 页面:include
 5 
 6     - 扩展Django内置分页
 7         - class CustomPaginator(Paginator):
 8     传入:
 9         - 所有数据
10         - 每页行数
11         - 当前页
12         - 最多页面数
13 
14 
15     - 自定义分页
16     传入:
17         - 所有数据的个数
18         - 每页行数
19         - 当前页
20         - 最多页面数

 

转载于:https://www.cnblogs.com/Lujun1028/p/9604007.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值