Django仿百度分页

本文介绍如何在Django中优雅地处理分页功能,包括当总页数小于10时显示全部页码,以及页数超过10时如何展示关键页码,确保用户体验。同时提供了HTML代码片段及views层的处理方法。

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

原创不易,转载请说明出处!
用Django实现分页功能:
1.若总页数<10,则显示所有页面,如下:
在这里插入图片描述
2.若页数大于10,则只显示10页,如下:
在这里插入图片描述
3.html代码

{#        分页效果  #}

{#        如果只有一页的情况下 #}
{#        {{ current_page.paginator.num_pages }}#}
{#        {{ current_page.paginator.count }}#}
        {% ifequal  current_page.paginator.num_pages 1 %}
            <span><a href="?page=1">1</a></span>
        {% endifequal %}

{#        页数少于10页的情况下 #}
        {% if current_page.paginator.num_pages <= 10 %}
            {% if current_page.has_previous %}
                <span id="prev"><a href="?page={{ current_page.previous_page_number }}">上一页</a></span>
            {% endif %}
            {% for i in current_page.paginator.page_range %}
                {% if current_page.number == i %}
                    <span>{{ current_page.number }}</span>
                    {% else %}
                    <span><a href="?page={{ i }}" id = "id{{ i}}"onclick="f({{ i}})">{{ i }}</a></span>
                {% endif %}
            {% endfor %}
             {% if current_page.has_next %}
                    <span id="next"><a href="?page={{ current_page.next_page_number }}">下一页</a></span>
             {% endif %}
        {% endif %}

{#        页数大于10页的情况下#}
 {% if current_page.paginator.num_pages > 10 %}
            {% if current_page.has_previous %}
                <span id="prev"><a href="?page={{ current_page.previous_page_number }}">上一页</a></span>
            {% endif %}
            {% for i in mypages %}
                {% if current_page.number == i %}
                    <span>{{ current_page.number }}</span>
                {% else %}
                    <span><a href="?page={{ i }}" >{{ i }}</a></span>
                {% endif %}
            {% endfor %}
             {% if current_page.has_next %}
                    <span id="next"><a href="?page={{ current_page.next_page_number }}">下一页</a></span>
             {% endif %}
        {% endif %}

4.在views层传入相应的页码数即可

def paginator_view(request):
    request.encoding = 'utf-8'
    user_lists=Users.objects.all()
    user_list=[]
    mypages=[]
    for user in user_lists:
        user_list.append(user)
    paginator=Paginator(user_list,5)
    if request.method=='GET':
        page=request.GET.get('page')
        try:
            current_page=paginator.page(page)
            size = 10   
            i=current_page.number 
            while i>0:
                mypages.append(i)
                size-=1
                if(size==5):
                    break
                i-=1
            mypages.reverse()         
            i = current_page.number+1
            while  i<=current_page.paginator.num_pages:
                mypages.append(i)
                size -= 1
                if(size==0):
                    break
                i+=1
            i = current_page.number-5;
            if(size>0):
               while(i>0):
                    mypages.append(i)
                    size -= 1
                    i-=1
                    if(size==0):
                        break
            mypages.sort()
        except PageNotAnInteger:
            current_page=paginator.page(1)
        except InvalidPage:
            return HttpResponse('找不到页面的内容')
        except EmptyPage:
            current_page=paginator.page(paginator.num_pages)
    return render(request,'page.html',{'current_page':current_page,'mypages':mypages})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值