Vad*_*lov 8 django pagination django-pagination
有一个创建分页范围的新选项 - get_elided_page_range https://docs.djangoproject.com/en/3.2/ref/paginator/#django.core.paginator.Paginator.get_elided_pa ge_range
我应该如何使用它?如何设置参数?我正在使用 CBV ListView。我尝试了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
Run Code Online (Sandbox Code Playgroud)
#模板.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 %}
Run Code Online (Sandbox Code Playgroud)
小智 21
页码不会传递给“get_elided_page_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)
Run Code Online (Sandbox Code Playgroud)
模板.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 %}
Run Code Online (Sandbox Code Playgroud)
您可以添加其他参数,例如:
{% get_proper_elided_page_range paginator page_obj.number 1 1 as page_range %}
如果您使用基于类的视图(例如ListView问题示例中的视图),那么如果您通过设置paginate_by成员触发分页,则该page_obj对象在方法中可用get_context_data。从这个方法中,您可以调用get_elided_page_range调用Paginator为正在呈现的模板设置额外的上下文。
例子:
\n def get_context_data(self, *, object_list=None, **kwargs):\n context = super().get_context_data(**kwargs)\n page: Page = context['page_obj']\n context['paginator_range'] = page.paginator.get_elided_page_range(page.number)\n return context\nRun Code Online (Sandbox Code Playgroud)\n然后您可以访问paginator_range从模板中进行访问。
使用说明:此方法返回一个生成器,该生成器生成一个int(这是有效的页码)或一个str(\xe2\x80\xa6),而后者不是。
| 归档时间: |
|
| 查看次数: |
4782 次 |
| 最近记录: |