python+Django CRM客户关系管理系统开发(四)--分页功能开发
作者:互联网
一、分页功能开发
前几章我们开发了首页,数据表展示页,以及数据过滤功能,这一节开发分页功能。
如果数据比较多的情况,不可能都在一页显示,所以需要开发分页功能。
二、分页功能,这里使用Django自带的分页。
1、首先了解一下Django的分页:
查看官方文档:https://docs.djangoproject.com/zh-hans/2.1/topics/pagination/
objects = ['john', 'paul', 'george', 'ringo']
p = Paginator(objects, 2) #表示把这个列表每页展示两个
p.num_pages #计算总共有多少页
type(p.page_range) <class 'range_iterator'> #计算页码范围,可以看出p.page_range这是个迭代器,翻到哪页就显示哪页的数据
p.page_range range(1, 3) #计算页码范围,包含第一个,不包含最后一个数字
>>> page1 = p.page(1) #实例化第一页这个对象,显示里边的值 >>> page1 <Page 1 of 2> >>> page1.object_list ['john', 'paul']
>>> page2 = p.page(2) #实例化第二页这个对象,这对象是有判断前一页,后一页,是否有其他页这些方法的,如果没有会报错 >>> page2.object_list ['george', 'ringo'] >>> page2.has_next() False >>> page2.has_previous() True >>> page2.has_other_pages() True >>> page2.next_page_number() Traceback (most recent call last): ... EmptyPage: That page contains no results
Django官方用法实例:假如有一个合同数据表,里边有许多合同数据,给这个数据分页
视图函数:
from django.shortcuts import render def listing(request): contact_list = Contacts.objects.all() #得到所有的数据集合 paginator = Paginator(contact_list, 25) # Show 25 contacts per page #分页 page = request.GET.get('page') #得到当前页码 contacts = paginator.get_page(page) #当前页码 对应页面显示的数据集合 return render(request, 'list.html', {'contacts': contacts})
templates用法实例:
{% for contact in contacts %}
{# Each "contact" is a Contact model object. #}
{{ contact.full_name|upper }}<br> ... {% endfor %} <div class="pagination"> <span class="step-links"> {% if contacts.has_previous %} <a href="?page=1">« first</a> <a href="?page={{ contacts.previous_page_number }}">previous</a> {% endif %} <span class="current"> Page {{ contacts.number }} of {{ contacts.paginator.num_pages }}. </span> {% if contacts.has_next %} <a href="?page={{ contacts.next_page_number }}">next</a> <a href="?page={{ contacts.paginator.num_pages }}">last »</a> {% endif %} </span> </div>
2、通过以上官方文档讲解,基本可以明白,用法就是对于 一堆数据集合,给它分页,然后通过request得到当前页,然后把当前页的数据显示到当前页面上,然后使用分页的next,previous等方法,显示上一页和下一页
接下来具体开发:
修改视图函数:
在HTML上添加如下代码:
显示效果如图:
但是点击next时,会报错,原因是把页码当成了过滤查询条件:
需要作如下修改:
修改后,可以正常翻页:
3、这么显示比较简陋,给它修改一下:
还是从bootstrap上使用,比较方便:https://v3.bootcss.com/components/#pagination
我们使用这个分页,能调节按钮大小:
<nav aria-label="..."> <ul class="pagination"> <li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">«</span></a></li> <li class="active"><a href="#">1 <span class="sr-only">(current)</span></a></li> ... </ul> </nav>
具体美化目前不是很懂,先参考一下别人写的:
tags:
html页面:
显示效果如图:
五、功能完善
1、之前只开发了设置了自定义的表的数据展示,没有添加自定义的表,点开没有数据展示,这里完善一下。
这里需要修改build_table_row,
修改后效果如图,数据显示正确,但是多了个过滤按钮:
这个按钮是前端显示的,因此在前端加一个判断:
有自定义过滤的就显示过滤,没有的就不显示
修改后显示效果如图:
2、每个表对应的应用名字,之前使用APP_NAME代替,现在给它显示出来:
由于前端不能显示下划线,因此还是通过tag返回给前端
显示效果如图:
每个表再加一个表名:
显示效果如图:
标签:显示,分页,contacts,python,Django,--,next,page2,page 来源: https://www.cnblogs.com/realizetomoney/p/13874734.html