Django高级扩展之Paginator分页实现

在项目中很常见的一种功能,主要用于大量数据在一页显示过于冗长,分为一页显示多条数据,分隔为多页显示;并常与条件筛选结合使用。

 

目录

Paginator对象

创建对象

属性

方法

异常

Page对象

创建对象

属性

方法

Paginator与page关系

示例

路由

视图

模板

创建列表页面

设置分页

当前页码不可点击

总结


 

Paginator对象

创建对象

格式:Paginator(列表,整数)

返回值:返回分页对象

属性

count 对象的总数

num_pages 页面总数

page_range [1,2, 3, 4],页码列表,从1开始。

方法

page(num) 获得一个page对象,如果提供的页码不存在,会抛出”invoalidPage”

异常

involidPage 当向page()传递的是一个无效的页码时抛出

pageNotAnIntrger 当向page()传递的不是一个整数时抛出

emptyPage 当向page()传递一个有效值,但是该页面没有数据时抛出

Page对象

创建对象

Pageinator对象的page()方法返回得到page对象。不需要手动创建。

属性

object_list 当前页上所有数据(对象)的列表

number 当前页的页码值

Paginator 当前page对象关联的paginator对象

方法

has_next() 判断是否有下一页,如果有返回True

has_previouts() 判断是否有上一页,如果有返回True

has_other_pages 判断是否有上一页或下一页,如果有返回True

next_page_number() 返回下一页的页码,如果下一页不存在抛出invalidPage异常

previous_page_number() 返回上一页的页码,如果下一页不存在抛出invalidPage异常

len() 返回当前页的数据(对象)个数

Paginator与page关系

Django高级扩展之Paginator分页实现_第1张图片

1.获取班级所有数据记录

2.传递数据集和每页2条给Paginator对象

3.Page对象根据当前分页页码请求相应记录数据

示例

看过上面的概念后,开始实际操作,还是通过完整的MTV来演示。

路由

设置分页列表路由,增加一个页码参数设置。

urlpatterns = [
    path(r'grade_list/', views.grade_list, name='grade_list'),
]

视图

获取班级列表数据,做分页处理,赋值模板。

def grade_list(request, num):

    """ 班级分页列表 """

    # 所有班级记录列表
    gradeList = Grades.objects.all()

    # 实例化Paginator 每页显示2条
    paginator = Paginator(gradeList, 2)

    # 获取当前页码数据
    res = paginator.page(num)

    return render(request, 'myapp/gradeList.html', {'res': res})

模板

创建列表页面

内容如下:




    
    班级分页列表


    {# 列表内容 #}
    
    {% for item in res %}
  • {{item.name}}
  • {% endfor %}

设置分页

在班级列表下,增加列表页码。

{# 设置分页页码 #}
    {% for index in res.paginator.page_range %}
  • {{index}}
  • {% endfor %}

当前页码不可点击

在循环中通过判断分页的当前页码字段,设置当前页码不可点击。

{# 设置分页页码 #}
    {% for index in res.paginator.page_range %} {% if res.number == index %}
  • {{index}}
  • {% else %}
  • {{index}}
  • {% endif %} {% endfor %}

总结

分页的实现就是把封装好的功能,通过对外的入口,传递相应参数就可调用;

实际开发中易于操作方便我们的调用,节省时间。

Django分页原理:获取所有符合条件数据,然后实例化分页对象,最后通过分页对象获取分页数据,返回响应和数据。

你可能感兴趣的:(#,Django高级,django,python,数学建模)