编程语言
首页 > 编程语言> > python+Django CRM客户关系管理系统开发(四)--分页功能开发

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">&laquo; 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 &raquo;</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">&laquo;</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