django 表单分页
程序员文章站
2022-05-21 15:17:22
...
{% ifnotequal cur_page 1 %}
|<
<
{% else %}
|<
<
{% endifnotequal %}
{{ cur_page }}
{% ifnotequal cur_page total_page %}
{{ cur_page|add:1 }}
{{ cur_page|add:2 }}
{% endifnotequal %}
{% if next %}
>
{% else %}
>
{% endif %}
{% ifnotequal cur_page total_page %}
>|
{% else %}
>|
{% endifnotequal %}
点击到最后一页,效果如下:
但实际上只有9页,判断next(即当前页是否存在下一页)标签时 加 3 溢出 到10页。
1、要求显示的页码范围数为3,不足的为2或者1;
请教该如何处理?
回复内容:
{% ifnotequal cur_page 1 %}
|<
<
{% else %}
|<
<
{% endifnotequal %}
{{ cur_page }}
{% ifnotequal cur_page total_page %}
{{ cur_page|add:1 }}
{{ cur_page|add:2 }}
{% endifnotequal %}
{% if next %}
>
{% else %}
>
{% endif %}
{% ifnotequal cur_page total_page %}
>|
{% else %}
>|
{% endifnotequal %}
点击到最后一页,效果如下:
但实际上只有9页,判断next(即当前页是否存在下一页)标签时 加 3 溢出 到10页。
1、要求显示的页码范围数为3,不足的为2或者1;
请教该如何处理?
在Paginator上再封装一层Spagination ,Views调用
obj = Model.object.filter(条件)
pagin = Spagination.wraper(obj, pageSize, page)
return pagin
Spagination类代码
#coding=utf-8
from django.core.paginator import Paginator
class Spagination(object):
def __init__(self, total, page=1, perpage=10):
self.total = total
self.pages = self.total / perpage + 1 if (self.total % perpage) > 0 else self.total / perpage
self.page = page
self.perpage = perpage
self.prev_num = page-1 if page > 1 else None
self.next_num = page+1 if page*perpage 0:
left_list.insert(0, self.page - p)
for p in range(1,right_edge):
if self.page + p 0:
left_list.insert(0, left_list[0]-1)
return left_list+[self.page]+right_list
def setItems(self, items):
self.items = items
@classmethod
def wraper(cls, objs, limit, current_page):
paginator = Paginator(objs, limit)
items = paginator.page(current_page)
pagin = Spagination(paginator.count, current_page, limit)
pagin.setItems(items)
return pagin
template代码
可以再加一层判断,判断是否超出