欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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 %}

    点击到最后一页,效果如下:
    django 表单分页

    但实际上只有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 %}

    点击到最后一页,效果如下:
    django 表单分页

    但实际上只有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代码

    {%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%}

    可以再加一层判断,判断是否超出