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对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值