23.Django分页

Django的分页比较简单

在views.py中

from django.core.paginator import Paginator
def index(request):

    article_list = Article.objects.all()
    # 关联列表 5表示每页多少条数据
    paginator = Paginator(article_list, 5)
    # 得到查询的页号
    page = request.GET.get('page')
    articles = paginator.get_page(page)
    # 返会包装后的文章
    return render(request, template_name='index.html', context={
        'articles': articles
    })

模版中:

<div>
      <!--是否还有上一页-->
        {% if articles.has_previous %}
            <a href="?page=1">第一页</a>
            <!--上一页页码-->
            <a href="?page={{ articles.previous_page_number }}">上一页</a>
        {% endif %}

        <!--当前页号  总页数-->
        {{ articles.number }}/{{ articles.paginator.num_pages }}

        <!--是否有下一页-->
        {% if articles.has_next %}
        <!--下一页页码-->
            <a href="?page={{ articles.next_page_number }}">下一页</a>
            <!--最后一页 即 总页数-->
            <a href="?page={{ articles.paginator.num_pages }}">最后一页</a>
        {% endif %}
    </div>

Paginator 对象:

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

object_list: 必选 list tuple queryset
per_page: 每页最大数量

方法:
get_page(number): 获取此页数据,并处理超过页数的数据,返回Page对象 如果没有数据会抛异常(EmptyPage),allow_empty_first_page设置为False返回空 page(number): 获取此页数据,如果没有更多数据抛异常InvalidPage

属性:
count: 数据的总条数
num_pages:总页数
page_range: 基于迭代的页码 e.g. yielding [1, 2, 3, 4].

Page对象

方法:
has_next():是否还有下一页
has_previous():是否有上一页
has_other_pages():其他页
next_page_number():下一页号
previous_page_number():上一页号
start_index():
end_index():

属性:
object_list: 数据源
number: 基于1的页码
paginator:关联的Paginator

声明:原创文章,版权所有,转载请注明出处,https://litets.com。