ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python+Django CRM客户关系管理系统开发(四)--分页功能开发

2020-10-25 21:00:26  阅读:230  来源: 互联网

标签:显示 分页 contacts python Django -- next page2 page


一、分页功能开发

前几章我们开发了首页,数据表展示页,以及数据过滤功能,这一节开发分页功能。

如果数据比较多的情况,不可能都在一页显示,所以需要开发分页功能。

 

二、分页功能,这里使用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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有