django paginator 分页功能

django 自带了一个分页的功能 ,使用起来很方便 。下面是使用方法 :


views.py
def index(request):
    context  =  {}
    article = Article.objects.all()
    page = request.GET.get('page',1)
    context = get_paginator(article,page)
    return render(request, 'home/index.html',context)

为了让主函数不要过于复杂,将分页器的功能分离出来了。

 

分页的主代码 :


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

def get_paginator(obj,page):
    page_size = 10 #每页显示的数量
    after_range_num = 5
    before_range_num = 6
    context = {}
    try:
        page = int(page)
        if page <1 :
            page = 1
    except ValueError:
        page = 1
    paginator = Paginator(obj,page_size)
    try:
        obj = paginator.page(page)
    except(EmptyPage,InvalidPage,PageNotAnInteger):
        obj = paginator.page(1)
   
    if page >= after_range_num:
        page_range = paginator.page_range[page-after_range_num:page+before_range_num]
    else:
        page_range = paginator.page_range[0:int(page)+before_range_num]
   
    context["page_objects"]=obj
    context["page_range"]=page_range
    return context templates 中如下实现:


    <div id="content">
        <div id="mainbar">
            {% for article in page_objects.object_list %}
            <div class="node_article">
                <h3><a href='{% url home.views.index %}'>{{article.subject}}</a></h3>
                <p>{{article.content|safe|escape}}</p>
            </div>
            {%endfor%}
            <div>
                <p class="page_container">
                {% if page_objects.has_previous %}
                <a href="?page={{ page_objects.previous_page_number }}" title="Pre">{% trans "next page"%}</a> {% endif %}
                {% for p in page_range %}
                    {% ifequal p page_objects.number %}
                        <span style="font-size:16px;" title="当前页"><b>{{p}}</b></span>       
                        {% else %}<a href="?page={{p}}" title="第{{p}}页">{{p}}</a>{% endifequal %}
                {% endfor %}    
                {% if page_objects.has_next %}
                <a href="?page={{ page_objects.next_page_number }}" title="Next">{% trans "next page"%}</a>
                {% endif %} 
                <b>
                    {%if page_objects.paginator.num_pages%} {{ page_objects.paginator.num_pages }}{% trans "page"%}{%endif%}
                </b>
                </p>
            </div>
        </div>
    </div>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django PaginatorDjango 中用于分页功能的内置模块。在网站开发中,通常会遇到数据量较大的情况,为了提高用户体验和减轻服务压力,需要对数据进行分页显示。这时,Django Paginator 就能够有效地帮助开发者实现这一功能。 使用 Django Paginator 非常简单方便。首先,开发者需要导入 PaginatorPage 类,然后在视图函数中获取到需要分页的数据集。接着,通过 Paginator 类将数据集进行分页处理,设置每页显示的数量,最后将分页对象传递给模板进行渲染。 在模板中,可以通过两个主要的变量实现分页显示。一个是 paginator 对象,它包含了有关分页信息的方法和属性,比如 num_pages、page_range 等;另一个是 page 对象,它包含了当前页的数据集合,可以通过 for 循环进行遍历显示。 除了基本的分页功能外,Django Paginator 还提供了一些其他的特性,比如处理不合法页码的情况、自定义显示页面的范围、处理数据过滤和排序等。开发者也可以根据自己的需求对 Paginator 进行定制化的扩展,以满足特定的业务需求。 总的来说,Django Paginator 提供了一种简单而强大的方式来处理分页数据,能够大大简化开发者的工作,并且可以有效地提升网站的性能和用户体验。因此,对于使用 Django 进行网站开发的开发者来说,熟练掌握和使用 Paginator 是非常重要的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值