[Django] Paginator分页如何控制显示标签数量

这篇博客详细介绍了如何在Django后台上使用Python代码实现数据分页,并在前端利用模板标签进行展示。通过设置默认值和判断条件,确保了分页功能的正常工作,同时使用自定义模板过滤器`reduce`来处理页码计算。在HTML中,利用条件判断和循环展示了分页链接,包括上一页、下一页以及当前页和附近页码。此外,还展示了总页数、总数和每页数量等信息。

后台Python代码: 


 users = Users.objects.all()
 if count == "":  # django中默认返回空值,所以加以判断,并设置默认值为1
        count = 10
    else:  # 如果有返回在值,把返回值转为整数型
        int(count)
 paginator = Paginator(users, count)
 if pindex == "":  # django中默认返回空值,所以加以判断,并设置默认值为1
    pindex = 1
 else:  # 如果有返回在值,把返回值转为整数型
    int(pindex)
 page = paginator.page(pindex)  # 传递当前页的实例对象到前端
 return render(request, "xxxx/xxxxx.html",{"users": users, "page": page}

前端顶部引用Django标签语法静态和tags:

{% load static %}
{% load staticfiles %}
{% load count %}

前端Html代码: 


<!-- 整个底部底部分页按钮显示 -->
<nav aria-label="Page navigation" class="subject-class-nav-page">
    <div class="pagination">
        <ul class="pagination">
            {% if page.has_previous %} <!--# 判断当前页是否有上一页-->
                <li><a onclick="searchFunction(10,{{ page.previous_page_number }})"
                       aria-label="Previous">
                    <span aria-hidden="true">&laquo;</span></a></li>
            {% endif %}
            {% for num in page.paginator.page_range %} <!--# 循环遍历页码列表,并展示到底部-->
                {% if num == page.number %}
                    <li class="active"><a href="">{{ num }}</a></li>
                {% else %}
                    {% if page.number <= 5 %}
                        {% if num < 10 %}
                            <li><a onclick="searchFunction(10,{{ num }})">{{ num }}</a></li>
                        {% endif %}
                    {% elif page.number > 5 and page.number <= page.paginator.num_pages|reduce:5 %}
                        {% if num > page.number|reduce:5 and num < page.number|plus:5 %}
                            <li><a onclick="searchFunction(10,{{ num }})">{{ num }}</a></li>
                        {% endif %}
                    {% elif page.number > page.paginator.num_pages|reduce:5 %}
                        {% if num > page.paginator.num_pages|reduce:9 %}
                            <li><a onclick="searchFunction(10,{{ num }})">{{ num }}</a></li>
                        {% endif %}
                    {% endif %}
                {% endif %}
            {% endfor %}

            {% if page.has_next %} <!-- 判断当前页是否有下一页-->
                <li><a onclick="searchFunction(10,{{ page.next_page_number }})" aria-label="Next">
                    <span aria-hidden="true">&raquo;</span></a></li>
            {% endif %}
        </ul>
        <div class="pagination-numpages">
            <span>总页数:</span><span>{{ page.paginator.num_pages }}</span>
            <span>总数:</span><span>{{ page.paginator.count }}</span>
            <span>单页个数:</span><span>{{ page.paginator.per_page }}</span>
        </div>
    </div>
</nav>

Django 模板语法标签 templatetags: count.py


@register.filter
def reduce(value, value2):
    try:
        return int(value) - int(value2)
    except:
        return 0

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值