Django分页paginator与page

知识简介:
paginator对象:
方法init(列表,int):返回分页对象,参数为列表数据,每页数据的条数
属性count():返回对象总数
属性num_pages:返回页面总数
属性page_range:返回页码列表,从1开始,例如[1,2,3,4]
方法page(m):返回page对象,表示第m页的数据,下标以1开始

page对象:
调用paginator对象的page方法,返回page对象,不需要手动构造
属性object_list:返回当前页对象的的列表
属性number:返回当前页是第几页,从1开始
属性paginator:当前页对应的paginator对象
方法has_next():如果有下一页返回True
方法has_previous():如果有上一页返回True
方法len():返回当前页面对象的个数

一个小例子
我们是在Django中实现的这个功能,至于怎么创建Django项目,已经怎么配置环境不在此次介绍范围内。

 #分页处理
    paginator=Paginator(goods_list,10)
    page=paginator.page(current_page)   #获取当前页要显示的商品对象

这里是视图函数里的代码段,goods_list是包含了所有商品对象的列表,设置为每页显示数据为10个,并且获取到当前页的数据。视图函数是怎么指向过来的,请结合自己的项目在应用urls中配置,然后在视图函数中使用return render()将page这个变量传递给Html页面。

        <ul class="goods_type_list clearfix">
                {% for goods in page %}
                <li>
                    <a href="detail.html"><img src="/static/{{ goods.pic }}"></a>
                    <h4><a href="detail.html">{{ goods.name }}</a></h4>
                    <div class="operate">
                        <span class="prize">{{ goods.price }}</span>
                        <span class="unit">{{ goods.unit }}</span>
                        <a href="#" class="add_goods" title="加入购物车"></a>
                    </div>
                </li>
                {% endfor %}


            </ul>


        <div class="box">
            <div id="pagination" class="page"></div>
        </div>

        <script>
            $(function() {


                $("#pagination").pagination({
                    currentPage: {{ page.number }},
                    totalPage: {{ page.paginator.num_pages }},
                    isShow: false,
                    count: 5,
                    prevPageText: "< 上一页",
                    nextPageText: "下一页 >",
                    callback: function(current) {
                        location.href='/product_list_{{ current_type.id }}_'+current+'/?order_by={{ order_by }}'
                    }
                });


            });
        </script>

这是html中的代码段,我们遍历传递过来的page,它包含了当前页要显示的所有商品的对象,我们将每个对象遍历过来,再结合数据库的字段将商品的基本信息显示出来。
callback: function(current) {
location.href=’/product_list_{{ current_type.id }}_’+current+’/?order_by={{ order_by }}’
}
这句代码的意思是,当你点击分页的时候,current就是你当前点击的这个分页的页码,也就是当前你在点击第几页,然后会跳转到location.href指定的超链接中去,然后经过urls匹配和视图函数处理,会得到你要请求的页码,并生成目标页的数据,返回给html页面,从而实现了一次分页查询!

猜你喜欢

转载自blog.csdn.net/weixin_40612082/article/details/80946567