python django paginator分页

写一个blog的时候用到了分页,纪录起来。

from django.core.paginator import Paginator

就是用到这个Paginator类

Paginator(object_list, per_page, [orphans=0, allow_empty_first_page=True])

参数object_list (数据总量)和 per_page(每页的数据量)为必填参数

orphans(最后一页对象的最少数目,默认为0) 如果想避免最后一页显示太少。则可以使用这个值。 那么最后一页的数据,自动被前移一页。比如总共23个数据。每页显示 10.orphans=3 那么,第一页为10,第二页为13.

allow_empty_first_page(表示首页是否可以为空)如果是 False 而且``object_list`` 为空,那么会触发 EmptyPage 异常。


简单用法

view层引用:

from django.core.paginator import Paginator                                      
                                                                                 
def index(request):                                                              
    home_display_columns = Category.objects.filter(home_display=True)            
    nav_display_columns = Category.objects.filter(nav_display=True)              
                                                                                 
    index_article = Article.objects.filter(published=1).order_by('-pub_date')
                                                                                 
    limit = 2                                                                    
    paginator = Paginator(index_article, limit)  #每页两条数据                                
    page = request.GET.get('page', 1)  #QueryDict objects,如果没有对应的page键,就返回默认1。                                          
    item_info = paginator.page(page)  #根据索引page,返回该page数据,如果不存在,引起 InvalidPage异常                                           
                                                                                 
    return render(request, 'index.html', {                                       
        'home_display_columns': home_display_columns,                            
        'nav_display_columns': nav_display_columns,                              
        'index_article': index_article,                                          
        'item_info': item_info,                                                     
    })

再看模版层, 用的semantic ui

template:

<div class="ui pagination center aligned menu">
  {% if item_info.has_previous %}
  <a class="item" href="?page={{item_info.previous_page_number}}">上一页</a>
  {% endif %}
  {% for page_num in item_info.paginator.page_range %}
  <a class="item" href="?page={{page_num}}">
    {{page_num}}
  </a>
  {% endfor %}
  {% if item_info.has_next %}
  <a class="item" href="?page={{item_info.next_page_number}}">下一页</a>
  {% endif %}
</div>
{% endblock content %} 
一个基本的分页模块就完成了。


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值