如何在 Django 分页器中使用 get_elided_pa​​ge_range ?

2024-01-01

有一个新选项可以创建分页范围 - get_elided_pa​​ge_rangehttps://docs.djangoproject.com/en/3.2/ref/paginator/#django.core.paginator.Paginator.get_elided_pa​​ge_range https://docs.djangoproject.com/en/3.2/ref/paginator/#django.core.paginator.Paginator.get_elided_page_range

我应该如何使用它?如何设置参数?我正在使用 CBV ListView。 我试过https://nemecek.be/blog/105/how-to-use-elided-pagination-in-django-and-solve-too-many-pages-problem https://nemecek.be/blog/105/how-to-use-elided-pagination-in-django-and-solve-too-many-pages-problem但这对我不起作用。

我有 81 页,当前页是 10。问题是我总是有范围 1 2 3 4 ... 80 81 我究竟做错了什么?

#views.py

class TrailersListView(ListView):
    queryset = Trailer.objects.all()
    paginate_by = 10

#模板.html

{% for i in paginator.get_elided_page_range %}
    {% 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 %}

页码不会传递给“get_elided_pa​​ge_range”方法,它始终使用默认值 (1)。所以我创建了一个自定义标签来向其传递一个数字。

应用程序名称/templatetags/paginator_tags.py

from django import template
from django.core.paginator import Paginator

register = template.Library()


@register.simple_tag
def get_proper_elided_page_range(p, number, on_each_side=3, on_ends=2):
    paginator = Paginator(p.object_list, p.per_page)
    return paginator.get_elided_page_range(number=number, 
                                           on_each_side=on_each_side,
                                           on_ends=on_ends)

模板.html

{% load paginator_tags %}

{% get_proper_elided_page_range paginator page_obj.number as page_range %} <!-- here -->
{% for i in page_range %}
    {% 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 %}

您可以添加其他参数,例如:

{% get_proper_elided_page_range paginator page_obj.number 1 1 as page_range %}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Django 分页器中使用 get_elided_pa​​ge_range ? 的相关文章

随机推荐