django提供了分页的工具,存在于django.core中
Paginator :数据分页工具
Page:具体的某一页面
Paginator :
对象创建: Paginator(数据集,每一页数据数)
属性:
count:对象总数
num_pages:页面总数
page_range: 页码列表,从1开始
方法:
page(整数): 获得一个page对象
常见错误:
InvalidPage:page()传递无效页码
PageNotAnInteger:page()传递的不是整数
Empty:page()传递的值有效,但是没有数据
Page:
对象获得,通过Paginator的page()方法获得
属性:
object_list: 当前页面上所有的数据对象
number: 当前页的页码值
paginator: 当前page关联的Paginator对象
方法:
has_next() :判断是否有下一页
has_previous():判断是否有上一页
has_other_pages():判断是否有上一页或下一页
next_page_number():返回下一页的页码
previous_page_number():返回上一页的页码
len():返回当前页的数据的个数
实现分页:
数据库的内容自己添加即可
创建模型:
1 class RequestLog(models.Model): 2 r_ip = models.CharField(max_length=32) 3 r_time = models.FloatField(default=0)
视图函数:
1 def get_log(request):
2 logs = RequestLog.objects.all()
3 paginator = Paginator(logs, 3)
4 try:
5 current_page = int(request.GET.get("page", 1))
6 page = paginator.page(current_page)
7 except EmptyPage:
8 page=paginator.page(1)
9 return render(request, ‘logs.html‘, context=locals())
路由注册:
1 urlpatterns = [ 2 url(r‘^getlog/‘, views.get_log), 3 ]
html分页:使用bootstrap,美化版分页
1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <title>Logs</title>
6 <script src="https://cdn.bootcss测试数据/bootstrap/3.3.7/js/bootstrap.min.js">
7 integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
8 crossorigin="anonymous"
9 </script>
10 </head>
11 <body>
12 <h2>Logs_ip</h2>
13 <ul>
14 {% for log in page.object_list %}
15 <li>{{ log.r_ip }}</li>
16 {% endfor %}
17 </ul>
18 <nav aria-label="Page navigation">
19 <ul class="pagination">
20 <li>
21 <a href="?page={{ current_page|add:-1 }}" aria-label="Previous">
22 <span aria-hidden="true">上一页</span>
23 </a>
24 </li>
25 {% for item in paginator.page_range %}
26 {% if current_page == item %}
27 <li class="active"><a href="?page={{ item }}">{{ item }}</a></li>
28 {% else %}
29 <li><a href="?page={{ item }}">{{ item }}</a></li>
30 {% endif %}
31 {% endfor %}
32 <li>
33 <a href="?page={{ current_page|add:+1 }}" aria-label="Next">
34 <span aria-hidden="true">下一页</span>
35 </a>
36 </li>
37 </ul>
38 </nav>
39 </body>
40 </html>
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did170550