django分页功能


# html代码请参照bootstrap https://v3.bootcss.com/components/#pagination

<nav aria-label="Page navigation">
  <ul class="pagination">
    <li>
      <a href="#" aria-label="Previous">
        <span aria-hidden="true">&laquo;</span>
      </a>
    </li>
    <li><a href="#">1</a></li>
    <li><a href="#">2</a></li>
    <li><a href="#">3</a></li>
    <li><a href="#">4</a></li>
    <li><a href="#">5</a></li>
    <li>
      <a href="#" aria-label="Next">
        <span aria-hidden="true">&raquo;</span>
      </a>
    </li>
  </ul>
</nav>


例如:views.py 


clientinfo = client.object.filter()

# 将数据按照规定每页显示 10 条, 进行分割
    
paginator = Paginator(clientinfo, 10)
    
page = request.GET.get('p')
    try:
        clientlist_page = paginator.page(page)
    
    # todo: 注意捕获异常
    except PageNotAnInteger:
        
        # 如果请求的页数不是整数, 返回第一页。
        clientlist_page = paginator.page(1)
    except InvalidPage:
        # 如果请求的页数不存在, 重定向页面
        return render(request, '404.html')
    except EmptyPage:
        
    # 如果请求的页数不在合法的页数范围内,返回结果的最后一页。
        clientlist_page = paginator.page(paginator.num_pages)



修改后的,分页HTML代码:


<nav aria-label="Page navigation">
  <ul class="pagination">
        <!--判断是否有上一页! 有就执行上一步按扭没有就禁用!-->
        {% if clientlist_page.has_previous == True %}
            <li>
              <a href="?p={{ clientlist_page.previous_page_number }}" aria-label="Previous">
                <span aria-hidden="true">&laquo;</span>
              </a>
            </li>
        {% else %}
            <li class="disabled">
            <a href="javascript:void(0)" aria-label="Previous">
                <span aria-hidden="false">&laquo;</span>
            </a>
            </li>
        {% endif %}
       <!--遍历所有的页码数!-->
      {% for num in paginator.page_range %}
          <!--判断当前页码是否等于显示页码等于就保持激活状态!-->
          {% if clientlist_page.number == num %}
            <li class="active"><a href="javascript:void(0)">{{ num }}</a></li>
          {% else %}
            <li><a href="?p={{ num }}">{{ num }}</a></li>
          {% endif %}
      {% endfor %}
    <!--判断是否有下一页! 有就执行下一步按扭没有就禁用!-->
    {% if clientlist_page.has_next == True %}
        <li>
            <a href="?p={{ clientlist_page.next_page_number }}" aria-label="Previous">
                <span aria-hidden="true">&raquo;</span>
            </a>
        </li>
    {% else %}
            <li class="disabled">
                <a href="javascript:void(0)" aria-label="Previous">
                    <span aria-hidden="false">&raquo;</span>
                </a>
        </li>
    {% endif %}
  </ul>
</nav>



注:激活,禁用状态全都是已引用 Bootstratp css 详情请参照:https://v3.bootcss.com/getting-started/