python web:Django分页器的使用

django自带分页器,当我们使用时需要先将其导入之后,使用用法如下

#views.py
#导入Paginator
from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger,InvalidPage
# 在这里我封装了分页器,避免代码太多重复,在需要使用的地方调用即可
def paginator(request,obj_data):
    """
    obj_data是需要分页的数据
    """
    paginator = Paginator(obj_data,13) #创建分页器
    current_page = request.GET.get("page",1) #获取页面分页器传来的GET参数,此时还是字符串
    page = int(current_page) #将字符串转化为整数
    # 固定显示7页,当大于7页时
    if paginator.num_pages > 7:
        if page-3 < 1:
        	#当页面输入前三页时,使其分页器只显示前7页不变
            pageRange = range(1,8)
        elif page+3 > paginator.num_pages:
            #当页面处于最后三页时,使分页器只显示最后固定7页
            pageRange = range(paginator.num_pages-6,paginator.num_pages+1)
        else:
            pageRange = range(page-3,page+4)
    else:
        pageRange = paginator.page_range

    try:
        obj_list = paginator.page(page)
    except PageNotAnInteger:
        obj_list = paginator.page(1)
    except InvalidPage:
        return HttpResponse('error')
    except EmptyPage:
        obj_list = paginator.page(paginator.num_pages)
    return {"pageRange":pageRange,"obj_list":obj_list}

接下来在前端页面将分页器获取并展示,分页器的样式是导入了layui的样式,代码如下

    <div class="page">
      <div id="pages" class="text-center">
        <nav aria-label="Page navigation">
          <ul class="pagination">
            <li>
              {% if obj_list.has_previous %} #此处是判断是否有下一页
                <a class="active" href="?page={{ obj_list.previous_page_number }}">&laquo;</a>
              {% endif %}
            </li>
            {% if obj_list.paginator.page_range|length != 1 %} #判断分页器的长度是否为1页
              {% for page_num in pageRange %}
                {% if page_num == obj_list.number %} #判断当前点击是否为当前页,不为当前页则跳转至点击页面
                  <li class="active">
                    <a href="#" style="background-color: cadetblue;">{{ page_num }}</a>
                  </li>
                {% else %}
                  <li>
                    <a href="?page={{ page_num }}">{{ page_num }}</a>
                  </li>
                {% endif %}
              {% endfor %}
            {% endif %}
            <li>
              {% if obj_list.has_next %} #判断是否有下一页
                <a class="active" href="?page={{ obj_list.next_page_number }}">&raquo;</a>
              {% endif %}
            </li>
          </ul>
        </nav>
      </div>
    </div>```

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值