Paginator分页器的使用

Django自带的分页方法

当数据量很大时,一次性返回的数据太多会导致加载数据很慢,这时候就要用到分页对数据进行处理,在django中有自带的分页器Paginator,以下是Paginator的详细使用方法。

1、引入

from django.core.paginator import Paginator,PageNotAnInteger,EmptyPage

2、使用

p = Paginator(new_list,1)		#news_list代表所有的数据,1代表每页的条数	
number = p.num_pages			#总的页码数
page_range = p.page_range  		#所有页码的迭代器
new_list.has_previous()			#是否有上一条数据
new_list.has_next()				#是否有下一条数据
new_list.previous_page_number()	#上一页的页码
new_list.next_page_number()		#下一页的页码

3、示例

from .models import News
def news(request):
    news_list = News.objects.order_by('id')
    p = Paginator(news_list,1)
    number = p.num_pages  #页码的总数
    page_range = p.page_range
    try:
        page = int(request.GET.get('page', 1))
    except:
        page = 1
    try:
        data = p.page(page)
    except:
        raise Http404
    page = int(page)
    if page < 4:   #一次只返回四个页码
        page_list = page_range[:4]
    elif page + 4 > number:
        page_list = page_range[-4:]
    else:
        page_list = page_range[page - 2:page + 2]
    print(p.count)
    return render(request, 'changed/news.html',{"news":news,"new_list":data,"page_range":page_list})

在前端中使用:

 {% if new_list.has_previous %}
     <li><a href="?page={{ new_list.previous_page_number }}" class="pag-item">&lt;&lt;</a></li>
 {% endif %}
{% for page in page_range %}
     {% if page == request.GET.page|add:0 %}
         <li><a href="?page={{ page }}" class="pag-item pag-active" >{{ page }}</a></li>
     {% else %}
          <li><a href="?page={{ page }}" class="pag-item" >{{ page }}</a></li>
      {% endif %}
{% endfor %}
       {% if new_list.has_next %}
          <li><a href="?page={{ new_list.next_page_number }}" class="pag-item">&gt;&gt;</a></li>
      {% endif %}

4、自定义分页器方法

def set_page(data,num,page):
    """
    :param data: 所有的数据
    :param num:  每页的数据个数
    :param page: 当前的页码
    :return:
    """
    p = Paginator(data,num)
    number = p.num_pages
    page_range = p.page_range
    try:
        page = int(page)
        data = p.page(page)
    except:
        data = p.page(1)
    if page < 5:  # 一次只返回5个页码
        page_list = page_range[:5]
    elif page + 4 > number:
        page_list = page_range[-5:]
    else:
        page_list = page_range[page - 3:page + 2]
    return data,page_list
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值