django 的分页对象的使用

使用django内置的分页器来实现分页效果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>分页2的练习</title>
</head>
<body>
<h3>分页2的练习</h3>
<p>当前页面中的内容</p>
<ul>
    {% for item in obj_page %}
        <li>{{ item.hname }}--{{ item.hbook.b_title }}</li>
    {% endfor %}
</ul>
<p>下面分页的显示</p>
{% if obj_page.has_previous %}
    <a href="{% url 'app05:in' obj_page.previous_page_number %}">上一页</a>
{% else %}
    上一页
{% endif %}
{% for current_page in all_pages %}
    {% if p_index == current_page %}
        {{ p_index }}
    {% else %}
        <a href="{% url 'app05:in' current_page %}">{{ current_page }}</a>
    {% endif %}
{% endfor %}
{% if obj_page.has_next %}
    <a href="{% url 'app05:in' obj_page.next_page_number %}">下一页</a>
{% else %}
    下一页
{% endif %}

</body>
</html>
后台逻辑的返回
class Index2(View):
    def get(self, request, index):
        list_hero = HeroInfo.objects.all()
        obj_page, p_index, all_pages = self.get_page(list_hero, index)
        print("当前的压面", p_index)
        return render(request, 'app05/分页2.html', locals())

    def get_page(self, list_hero, index):
        # 创建分页对象
        p = Paginator(list_hero, 2)
        # 获取当前页中的内容
        if index == "":
            index = "1"
        index = int(index)
        obj_page = p.page(index)
        all_pages = p.page_range
        return obj_page, index, all_pages
利用django自带分页组件实现分页功能

使用分页器Paginator:
在视图中使用 Paginator来为查询集分页。我们提供视图以及相关的模板来展示如何展示这些结果。


Paginator常用属性
per_page: 每页显示条目数量
count: 数据总个数
num_pages:总页数
page_range:总页数的索引范围,页码的范围,从1开始,例如[1, 2, 3, 4]。
Paginator所需参数:


object_list 一个列表,元祖或则Django 的Queryset 对象 或则其他对象带有 count() or __len__()的方法
per_page :就是1页显示几条数据 
Paginator对象的方法:


page(number) :返回在提供的下标处的Page对象,下标以1开始。
使用page对象方法:

Page.has_next()
如果有下一页,则返回True。

Page.has_previous()
如果有上一页,返回 True。

Page.has_other_pages()
如果有上一页或下一页,返回True。

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

Page.previous_page_number()
返回上一页的页码。如果上一页不存在,抛出InvalidPage异常。

Page.start_index()
返回当前页上的第一个对象,相对于分页列表的所有对象的序号,从1开始。比如,将五个对象的列表分为每页两个对象,第二页的start_index()会返回3。

Page.end_index()
返回当前页上的最后一个对象,相对于分页列表的所有对象的序号,从1开始。 比如,将五个对象的列表分为每页两个对象,第二页的end_index() 会返回 会返回 4。


Page.object_list
当前页上所有对象的列表。

Page.number
当前页的序号,从1开始。

Page.paginator
相关的Paginator对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django 中可以使用分页器 Paginator 来实现数据库分页。具体实现步骤如下: 1. 在视图函数中使用 Paginator 对象进行分页设置: ```python from django.core.paginator import Paginator def my_view(request): # 获取数据 data_list = MyModel.objects.all() # 每页显示数量 per_page = 10 # 创建分页对象 paginator = Paginator(data_list, per_page) # 获取当前页码 page = request.GET.get('page') # 获取当前页的数据 data = paginator.get_page(page) # 渲染模板 return render(request, 'my_template.html', {'data': data}) ``` 上述代码中,首先获取数据列表 data_list,然后通过 Paginator 对象创建分页器 paginator,并设置每页显示数量为 per_page。在获取当前页码 page 后,通过 `get_page()` 方法获取当前页数据 data,并将数据传递给模板进行渲染。 2. 在模板中使用分页对象进行渲染: ```html {% for item in data %} <!-- 显示数据 --> {% endfor %} <!-- 显示分页链接 --> <div class="pagination"> <span class="step-links"> {% if data.has_previous %} <a href="?page=1">« 第一页</a> <a href="?page={{ data.previous_page_number }}">上一页</a> {% endif %} <span class="current-page"> {{ data.number }} / {{ data.paginator.num_pages }} </span> {% if data.has_next %} <a href="?page={{ data.next_page_number }}">下一页</a> <a href="?page={{ data.paginator.num_pages }}">最后一页 »</a> {% endif %} </span> </div> ``` 在模板中,首先通过遍历 `data` 变量来显示当前页数据。然后,使用分页对象的 `has_previous`、`previous_page_number`、`number`、`paginator.num_pages`、`has_next` 和 `next_page_number` 属性来生成分页链接,使用户可以通过链接跳转到其他页面。 以上就是 Django使用 Paginator 实现数据库分页的基本步骤。需要注意的是,具体使用方式可能会因个人习惯和项目需求而有所不同,建议查看官方文档并根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值