gpt4 book ai didi

Django ListView如何获得digg风格的分页

转载 作者:行者123 更新时间:2023-12-02 15:24:09 25 4
gpt4 key购买 nike

class Shipment(ListView):
template_name = "listing-base.html"
model = Shipment
context_object_name = "shipment_list"
paginate_by = 25

输出是这样的

Previous Page 1   of  7  NEXT PAGE

相反,我需要

 Previous Page 1 2 ...5..7  NEXT PAGE

请帮忙提前致谢"

最佳答案

这个是用 CBV 测试的,它是这个 blog post 中代码的修改版本.

分页被添加到模板标签中,因此您可以为使用 ListView 呈现的任何模板加载它,例如,listing-base.html :

{% load paginator_tags %}

<!-- your list -->

{% get_pagination 2 1 %}

get_pagination 是在 paginator_tags.py 中定义的模板标签。更改 first_last_amountbefore_after_amount 您可以控制要显示的页面数量:

Previous  1  2  ... 5  6  7  8  9  10  11  ... 25  26  Next

paginator_tags.py:

from django import template

register = template.Library()


@register.inclusion_tag('_pagination.html', takes_context=True)
def get_pagination(context, first_last_amount=2, before_after_amount=4):
page_obj = context['page_obj']
paginator = context['paginator']
is_paginated = context['is_paginated']
page_numbers = []

# Pages before current page
if page_obj.number > first_last_amount + before_after_amount:
for i in range(1, first_last_amount + 1):
page_numbers.append(i)

if first_last_amount + before_after_amount + 1 != paginator.num_pages:
page_numbers.append(None)

for i in range(page_obj.number - before_after_amount, page_obj.number):
page_numbers.append(i)

else:
for i in range(1, page_obj.number):
page_numbers.append(i)

# Current page and pages after current page
if page_obj.number + first_last_amount + before_after_amount < paginator.num_pages:
for i in range(page_obj.number, page_obj.number + before_after_amount + 1):
page_numbers.append(i)

page_numbers.append(None)

for i in range(paginator.num_pages - first_last_amount + 1, paginator.num_pages + 1):
page_numbers.append(i)

else:
for i in range(page_obj.number, paginator.num_pages + 1):
page_numbers.append(i)

return {
'paginator': paginator,
'page_obj': page_obj,
'page_numbers': page_numbers,
'is_paginated': is_paginated,
}

_pagination.html 文件:

{% if is_paginated %}
<div class="pagination-wrapper">
<ul class="pager">
{% if page_obj.has_previous %}
<li><a href="?page={{ page_obj.previous_page_number }}">Previous</a></li>
{% endif %}
{% for page in page_numbers %}
{% if page %}
{% ifequal page page_obj.number %}
<li class="disabled"><a href="#">{{ page }}</a></li>
{% else %}
<li><a href="?page={{ page }}">{{ page }}</a></li>
{% endifequal %}
{% else %}
...
{% endif %}
{% endfor %}
{% if page_obj.has_next %}
<li><a href="?page={{ page_obj.next_page_number }}">Next</a></li>
{% endif %}
</ul>
</div>
{% endif %}

关于Django ListView如何获得digg风格的分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31738790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com