{% 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-8from django.core.paginator import paginatorclass 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代码
{%if pagin.has_prev %} 上页 {%endif%} 首页 {%for p in pagin.visible_pages%} {%if p != 1 and p != pagin.pages%} {{p}} {%endif%} {%endfor%} 尾页 {%if pagin.has_next %} 下页 {%endif%}
可以再加一层判断,判断是否超出