24、Django-网站分页功能-Pagintor类

-Django提供了Paginator类可以方便的实现分页功能
-Painator 类 位于 django.core.pagintor 模块中
负责分页数据整体的管理
对象的构造方法:
paginator = Paginator(object_list, per_page)
  
    - 参数:
        - object_list :需要分页的数据的对象列表-数据的个数
        - per_page:每页数据的个数
    
    - 返回值:
        - Paginator的对象
        
        
Paginator的属性:
    - count:需要分页数据的对象总数
    - num_page:分页后的页面总数
    - page_range:从1开始的range对象、用于记录当前的页码
    - per_page 每页数据的个数
    
Pagintor方法:
paginator对象.page(number)
    - 参数:number为页码信息(从1开始)
    - 返回当前number 页对应的页面信息
    - 如果提供的页码不存在、抛出InvalidPage异常
    

page对象 定义:
- 负责具体某一页的数据管理
- 创建对象
    - Paginator对象的page()方法返回Page对象
    - page = pageinator.page(页码)
    
Page对象属性:
    - object_list:当前页面上所有数据对象的列表
    - number:当前页面的序号、从1开始
    - paginator:当前page对象相关的Pageinator对象


Page对象方法:
    - has_next(): 如果有下一页返回True
    - has_previous():如果有上一页返回True
    - has_other_pages():如果有上一页或下一页返回True
    - next_page_number():返回下一页的页码、如果下一页不存在、抛出InvalidPage异常
    - previous_page_number():返回上一页的页码、如果上一页不存在、抛出InvalidPage异常

 

案例

views.py
---------------------------------------------------------------
#分页功能
def test_page(request):
    # 获取页码
    page_num = request.GET.get('page', 1)
    all_data = ['a', 'b', 'c', 'd', 'e']
    # 创建分页对象 5个数据一页
    paginator = Paginator(all_data, 2)
    #初始化 具体页码page对象
    c_page = paginator.page(int(page_num))

    return render(request, 'test_page.html', locals())
-----------------------------------------------------------------------
test_page.html
---------------------------------------------------------------------
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>分页</title>
</head>
<body>

{% for p in c_page %}
    <p>
        {{ p }}
    </p>

{% endfor %}


{% if c_page.haas_previous %}
    <a href="/p_page?page={{ c_page.previous_page_number }}">上一页</a>

{% else %}
    上一页
{% endif %}

{% for p_num in paginator.page_range %}
    {% if p_num == c_page.number %}
        {{ p_num }}
    {% else %}
        <a href="/p_page?page={{ p_num }}">{{ p_num }}</a>
    {% endif %}
{% endfor %}

{% if c_page.has_next %}
    <a href="/p_page?page={{ c_page.next_page_number }}">下一页</a>

{% else %}
    下一页
{% endif %}

</body>
</html>
---------------------------------------------------------------------------
urls.py
---------------------------------------------------------------------
from django.contrib import admin
from django.urls import path
from midware import views

urlpatterns = [
    path('p_page/', views.test_page),
]
---------------------------------------------------------------

 

posted @ 2024-07-09 22:34  little小新  阅读(14)  评论(0编辑  收藏  举报