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请提前帮忙谢谢“
发布于 2015-07-31 08:28:24
这个版本是用CBV测试的,它是这个博客帖子代码的一个修改版本。
分页是在模板标记中添加的,因此您只需为使用ListView呈现的任何模板加载它,例如,对于listing-base.html
{% load paginator_tags %}
<!-- your list -->
{% get_pagination 2 1 %}get_pagination是在paginator_tags.py中定义的模板标记。更改first_last_amount和before_after_amount可以控制要显示多少页:
Previous 1 2 ... 5 6 7 8 9 10 11 ... 25 26 Nextpaginator_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 %}发布于 2015-07-31 05:50:44
您可以使用Django无止境的分页,并使用它轻松地实现数码分页。
发布于 2015-07-31 05:56:29
试试折叠式的方法
在views.py中
page = request.POST['page_numb']
paginator = Paginator(object_list, 10)
lenth_data1 = paginator.num_pages
lenth_data = range(1, lenth_data1 + 1)
return render(request, 'home/home.html', {'lenth_data':lenth_data})在html中
<input type="hidden" value="{{ organization_search.number }}" id="page_numb2"name="page_numb">
<ul class="pagination">
{% if organization_search.has_previous %}
<li class="waves-effect overlay">
<a
id="{{ i }}nexssa"
onclick="nex({{ organization_search.previous_page_number }})">
<i class="mdi-navigation-chevron-left"></i></a></li>
{% else %}
<li class="disabled"><a href="#!"><i class="mdi-navigation-chevron-left"></i></a>
</li>
{% endif %}
{% for i in lenth_data %}
<li class="overlay waves-effect {% if forloop.counter == organization_search.number %}active{% endif %}">
<a
id="{{ i }}nex" onclick="nex({{ i }})">{{ i }}</a></li>
{% endfor %}
{% if organization_search.has_next %}
<li class="waves-effect">
<a
id="{{ i }}nexsa"
onclick="nex({{ organization_search.next_page_number }})"><i
class="mdi-navigation-chevron-right"></i></a></li>
{# <a href="?page={{ organization_search.next_page_number }}"><i#}
{# class="mdi-navigation-chevron-right"></i></a></li>#}
{% else %}
<li class="disabled"><a href="#!"><i class="mdi-navigation-chevron-right"></i></a>
</li>
{% endif %}
</ul>
</div>
</div>
function nex(i) {
$("#page_numb2").val(i);
$("#first_form").submit();
}希望这能帮上忙
https://stackoverflow.com/questions/31738790
复制相似问题