django paginator 分页功能

本文介绍了Django框架内置的分页功能,并提供了一个实际应用的例子。通过将分页功能从主视图中分离出来,使得代码更加清晰易读。此外,还详细展示了如何在模板中实现翻页操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值