Django--分页

知识储备

Django提供了一些类实现管理数据分页,这些类位于django/core/paginator.py中。

1、Paginator对象

Paginator(列表,int):返回分页对象,参数为列表数据,每一页的条数
count:对象总数
num_pages:页面总数
page_range:页码列表,从1开始,例如[1, 2, 3, 4]
page(num):下标从1开始,如果提供的页码不存在,抛出InvalidPage异常

2、Page对象

Paginator对象的page()方法返回Page对象,不需要手动构造
object_list:当前页上所有对象的列表
number:当前页的序号,从1开始
paginator:当前Page对象相关的Paginator对象
has_next():如果有下一页返回True
has_previous():如果有上一页返回True
has_other_pages():如果有上一页或下一页返回True
next_page_number():返回下一页的页码,如果下一页不存在,抛出InvalidPage异常
previous_page_number():返回上一页的页码,如果上一页不存在,抛出InvalidPage异常
len():返回当前页面对象的个数

一、基于函数视图的分页

1、View

from django.core.paginator import Paginator

# 查询英雄
def hero(request, page_now):
    if page_now == "":
        page_now = 1
    # 每一页的条数
    page_size = 2
    hero_list = HeroInfo.objects.all()
    # 创建Paginator对象
    my_paginator = Paginator(hero_list, 2)
    # 创建Page对象
    my_page = my_paginator.page(page_now)
    # 渲染模板,返回响应
    return render(request, "hero.html", {"hero_list": hero_list, "my_page": my_page})

2、Template

<ul>
        {% for hero in my_page.object_list %}
        <li>
            {{ hero.hname }}&nbsp;&nbsp;&nbsp;&nbsp;
            <a href="/myhero/hero_delete/{{ hero.id }}">删除</a>
            <a href="/myhero/hero_edit/{{ hero.id }}">编辑</a>
        </li>
        {% endfor %}
    </ul>
    {% if my_page.has_previous %}
        <a href="/myhero/hero/{{ my_page.previous_page_number }}">上一页</a>
    {% endif %}
    {% for i in my_page.paginator.page_range %}
        {% if my_page.number == i %}
            <span>{{ i }}</span>
        {% else %}
            <a href="/myhero/hero/{{ i }}">{{ i }}</a>
        {% endif %}
    {% endfor %}
    {% if my_page.has_next %}
        <a href="/myhero/hero/{{ my_page.next_page_number }}">下一页</a>
    {% endif %}

二、基于类视图的分页

1、View

class HeroListView(ListView):
    queryset = HeroInfo.objects.all()
    context_object_name = 'hero_list'
    template_name = 'hero.html'
    # 分页,默认使用page_obj对象
    paginate_by = 2

2、Template

<ul>
        {% for hero in hero_list %}
        <li>
            {{ hero.hname }}&nbsp;&nbsp;&nbsp;&nbsp;
            <a href="/myhero/hero_delete/{{ hero.id }}">删除</a>
            <a href="/myhero/hero_edit/{{ hero.id }}">编辑</a>
        </li>
        {% endfor %}
    </ul>
    {% if page_obj.has_previous %}
        <a href="/myhero/hero_list?page={{ page_obj.previous_page_number }}">上一页</a>
    {% endif %}
    {% for i in page_obj.paginator.page_range %}
        {% if page_obj.number == i %}
            <span>{{ i }}</span>
        {% else %}
            <a href="/myhero/hero_list?page={{ i }}">{{ i }}</a>
        {% endif %}
    {% endfor %}
    {% if page_obj.has_next %}
        <a href="/myhero/hero_list?page={{ page_obj.next_page_number }}">下一页</a>
    {% endif %}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 方法一:使用pure_pagination进行分页 1. pure_pagination介绍 pure_pagin...
    Jlan阅读 1,235评论 0赞 7
  • Django 中已经写好了分页实现的逻辑,我们在做分页的时候,仅需要通过俩个对象Paginator 和 Page ...
    鸟它鸟阅读 341评论 0赞 0
  • 我们先在 shell 中演示分页器的用法: 分页器示例 现在我们在 view 中使用分页器: 浏览器打开:http...
    SingleDiego阅读 1,711评论 2赞 3
  • 包:django.core.paginator Paginator对象 Paginator(列表,int):返回分...
    _琳哥阅读 549评论 0赞 0
  • Django自身提供了一些类来实现管理分页,数据被分在不同的页面中,并带有“上一页/下一页”标签。这个类叫做Pag...
    一纸繁鸢w阅读 1,616评论 0赞 0

友情链接更多精彩内容