Django框架之分页器Paginator

Django提供了一个非常实用的模块Paginator,可以对大量的数据进行分页处理,比原生的自行分页方式更简洁。

下面先对原生的分页方式进行一下介绍,熟悉Paginator分页器的原理:

我们可以通过在地址栏里面传参(页码和每页的最大数据量),在views.py里面get参数进行分页。

view.py内容

def get(req):
    page = int(req.GET.get("page",1))     
    #传递参数 page 无参数时默认值为1
    per_page = int(req.GET.get("per_page",5))   
    #传递参数 per_page 无参数时默认值为 5
    news = News.objects.all()[per_page*(page-1):per_page*page]
    #根据已知参数对数据库数据进行切割,这里要注意对page和per_page
    #进行数据转换。News是我的一个表
    return render(req,"test.html",{"news":news})

html内容:(body等略)

    {% for foo in news %}
  • {{ foo.tag }}
  • {% endfor %}

Django框架之分页器Paginator_第1张图片
可以看到输出第六页的数据,每页10条。(不用在意内容)

下面开始介绍Paginator的使用:

首先导入模块

from django.core.paginator import Paginator

view.py:

def get(req):
    page = int(req.GET.get("page",1))
    per_page = int(req.GET.get("per_page",10))
    news = News.objects.all()
    paginator = Paginator(news,per_page)  
    #利用分页器将news切割,每个paginator含有per_page条数据
    object = paginator.page(page)
    #paginator.page用于分页,object用于显示第几页的数据
    return render(req,"test.html",{"object":object})

html:

    {% for foo in object %}
  • {{ foo.tag }}
  • {% endfor %}

显示结果跟原生方式一样

然而我们平时所见的网页都会有页码。在Paginator中对应的是page_range
在上述view.py内添加语句

page_range = paginator.page_range

render 添加返回集

 return render(req,"test.html",{"object":object,"page_range":page_range})

html添加语句:


Django框架之分页器Paginator_第2张图片点击页码可以显示不同的内容,至此分页器的使用已经讲述完成

扩展:

(一):对于传入的数据集还有很多操作比如上一页和下一页,如下图所示,可以根据需要添加样式:Django框架之分页器Paginator_第3张图片另外,页码的美化可以通过bootstrap进行修饰。

(二): paginator小知识
定位到paginator.py 观察代码结构structure有一个page_range函数,观察返回值,paginator帮我们自动返回从1开始的页码。
Django框架之分页器Paginator_第4张图片以上内容如有描述错误之处,希望各位指正。如需转载,望注明出处。

你可能感兴趣的:(python,django)