You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django CBV ListView中使用Paginator的get_elided_page_range方法

问题根因

你调用get_elided_page_range方法时没有传入必选的当前页码参数,也没有配置页码展示规则参数,导致方法使用默认配置,只渲染首尾固定数量的页码,不会展示当前页前后的页码。

解决方法

只需修改模板中调用分页方法的代码,传入必要参数即可:

  1. 第一个参数填当前页码page_obj.number,这是get_elided_page_range的必传参数
  2. 可通过两个可选参数自定义展示规则:
    • on_each_side:当前页码左右各展示多少个连续页码,默认值为2
    • on_ends:分页首尾两端各展示多少个固定页码,默认值为2

修改后的模板代码

{% for i in paginator.get_elided_page_range(page_obj.number, on_each_side=2, on_ends=2) %}
    {% if page_obj.number == i %}
        <li class="active page-item">
            <span class="page-link">{{ i }}</span>
        </li>
    {% else %}
        {% if i == paginator.ELLIPSIS %}
            <li class="page-item">
                <span class="page-link">{{ paginator.ELLIPSIS }}</span>
            </li>
        {% else %}
            <li class="page-item">
                <a class="page-link" href="?page={{ i }}">{{ i }}</a>
            </li>
        {% endif %}
    {% endif %}
{% endfor %}

效果验证

按上述配置后,总81页、当前为第10页时,渲染出的分页范围为:1 2 ... 8 9 10 11 12 ... 80 81,符合预期展示效果。你可以根据业务需要调整on_each_side和on_ends的数值,修改前后和两端展示的页码数量。
注意该方法仅在Django 3.2及以上版本可用,版本低于要求的话需要先升级Django版本。

内容的提问来源于stack exchange,提问作者Vadim Beglov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 13:09:04