Пример #1
0
Файл: views.py Проект: sijia3/my
def get_pages(request, object_lists):
    current_page = request.GET.get('page', 1)  # 获得当前页数,默认为1
    paginator = Paginator(object_lists, 7)  # 得到一个分页后的对象
    object_lists = paginator.page(current_page)  # 得到当前页面的blog列表
    current = object_lists.number
    page_all = paginator.num_pages
    page_range = []
    if page_all < 5:
        page_range = paginator.page_range
    else:
        page_range += [1, page_all]
        page_range += [current - 1, current, current + 1]
        if current == 1 or current == page_all:
            page_range += [current + 2, current - 2]

        # 去掉超出范围的页码
        page_range = filter(lambda x: 1 <= x <= page_all, page_range)

        # 排序去重
        page_range = sorted(list(set(page_range)))
        t = 1  # 这是一个坑
        for i in range(1, len(page_range)):
            # print page_range[i],page_range[i-1]
            if page_range[t] - page_range[t - 1] > 1:
                page_range.insert(t, '...')
                # print page_range
                t += 1
            t += 1
        # print page_range
    paginator.page_range_ex = page_range  # 创建一个paginator的属性page_range_ex
    return object_lists, paginator
Пример #2
0
def get_page(request, objectlist):
    """
    get the paginator
    :param request:
    :param objectlist: queryset object
    :return: paginator, queryset object on this page
    """
    current_page = request.GET.get('page', 1)
    paginator = Paginator(objectlist, settings.EACHPAGE_NUMBER)
    try:
        object_list = paginator.page(current_page)
    except PageNotAnInteger or EmptyPage:
        object_list = paginator.page(1)

    page_range = []
    current = object_list.number  # 当前页码
    page_all = paginator.num_pages  # 总页数
    mid_pages = 3  # 中间段显示的页码数
    page_goto = 1  # 默认跳转的页码

    # 获取优化显示的页码列表
    if page_all <= 2 + mid_pages:
        # 页码数少于6页就无需分析哪些地方需要隐藏
        page_range = paginator.page_range
    else:
        # 添加应该显示的页码
        page_range += [1, page_all]
        page_range += [current - 1, current, current + 1]

        # 若当前页是头尾,范围拓展多1页
        if current == 1 or current == page_all:
            page_range += [current + 2, current - 2]

        # 去掉超出范围的页码
        page_range = filter(lambda x: x >= 1 and x <= page_all, page_range)

        # 排序去重
        page_range = sorted(list(set(page_range)))

        # 查漏补缺
        # 从第2个开始遍历,查看页码间隔,若间隔为0则是连续的
        # 若间隔为1则补上页码;间隔超过1,则补上省略号
        t = 1
        for i in range(len(page_range) - 1):
            step = page_range[t] - page_range[t - 1]
            if step >= 2:
                if step == 2:
                    page_range.insert(t, page_range[t] - 1)
                else:
                    page_goto = page_range[t - 1] + 1
                    page_range.insert(t, '...')
                t += 1
            t += 1

    # 优化结果之后的页码列表
    paginator.page_range_ex = page_range
    # 默认跳转页的值
    paginator.page_goto = page_goto
    return paginator, object_list
Пример #3
0
    def getpage(self):
        paginator = Paginator(self.objectlist, self.num)
        currentPage = self.request.GET.get('page', 1)
        object_list = paginator.get_page(
            currentPage)  # Django 2.0下新增了get_page()方法

        page_range = []
        current = object_list.number  # 当前页码
        page_all = paginator.num_pages  # 总页数
        mid_pages = 3  # 中间段显示的页码数
        page_go = 1  # 默认跳转的页码

        # 获取优化显示的页码列表
        if page_all <= 2 + mid_pages:
            # 页码数少于6页就无需分析哪些地方需要隐藏
            page_range = paginator.page_range
        else:
            # 添加应该显示的页码
            page_range += [1, page_all]
            page_range += [current - 1, current, current + 1]

            # 若当前页是头尾,范围拓展多1页
            if current == 1 or current == page_all:
                page_range += [current + 2, current - 2]

            # 去掉超出范围的页码
            page_range = filter(lambda x: x >= 1 and x <= page_all, page_range)

            # 排序去重
            page_range = sorted(list(set(page_range)))

            # 查漏补缺
            # 从第2个开始遍历,查看页码间隔,若间隔为0则是连续的
            # 若间隔为1则补上页码;间隔超过1,则补上省略号
            t = 1
            for i in range(len(page_range) - 1):
                step = page_range[t] - page_range[t - 1]
                if step >= 2:
                    if step == 2:
                        page_range.insert(t, page_range[t] - 1)  # 补页码
                    else:
                        page_go = page_range[t - 1] + 1
                        page_range.insert(t, '...')
                    t += 1
                t += 1

        # 优化结果之后的页码列表
        paginator.page_range_ex = page_range
        # 默认跳转页的值
        paginator.page_go = page_go

        return paginator, object_list
Пример #4
0
def getPages(request, objectlist):
    """得到页码"""
    currentPage = request.GET.get('page', 1)
    paginator = Paginator(objectlist, settings.EACHPAGE_NUMBER)
    objectlist = paginator.page(currentPage)

    page_range = []
    current = objectlist.number  # 当前页码
    page_all = paginator.num_pages  # 总页数
    mid_pages = 3  # 中间段显示的页码数
    page_goto = 1  # 默认跳转的页码

    # 优化显示的页码列表
    if page_all <= 2 + mid_pages:
        # 页码少于六页就不需要隐藏
        page_range = paginator.page_range
    else:
        # 添加应该显示的页码
        page_range += [1, page_all]
        page_range += [current - 1, current, current + 1]

        # 如果当前页是首尾页,范围拓展多1页
        if current == 1 or current == page_all:
            page_range += [current + 2, current - 2]

        # 去掉重复的页码
        page_range = filter(lambda x: x >= 1 and x <= page_all, page_range)

        # 排序去重
        page_range = sorted(list(set(page_range)))

        # 查漏补缺
        # 从第2个开始遍历,查看页码间隔,若间隔为0则是连续的
        # 若间隔为1则补上页码;间隔超过1,则补上省略号
        t = 1
        for i in range(len(page_range) - 1):
            step = page_range[t] - page_range[t - 1]
            if step >= 2:
                if step == 2:
                    page_range.insert(t, page_range[t] - 1)
                else:
                    page_goto = page_range[t - 1] + 1
                    page_range.insert(t, '...')
                t += 1
            t += 1

    # 优化之后的页码列表
    paginator.page_range_ex = page_range
    # 默认跳转页的值
    paginator.page_goto = page_goto

    return paginator, objectlist
Пример #5
0
def paginator_processing(names, page, get_par, num_items):
    pages = Paginator(names, num_items)
    page_range = []
    mid_pages = 3
    page_goto = 1
    current = int(page)
    page_all = pages.num_pages
    try:
        names = pages.page(page)
    except PageNotAnInteger:
        names = pages.page(1)
    except EmptyPage:
        names = pages.page(1)
    if page_all <= 2 + mid_pages:
        page_range = pages.page_range
    else:
        page_range += [1, page_all]
        page_range += [current - 1, current, current + 1]
        if current == 1 or current == page_all:
            page_range += [current + 2, current - 2]
        page_range = filter(lambda x: x >= 1 and x <= page_all, page_range)
        page_range = sorted(list(set(page_range)))
        t = 1
        for i in range(len(page_range) - 1):
            step = page_range[t] - page_range[t - 1]
            if step >= 2:
                if step == 2:
                    page_range.insert(t, page_range[t] - 1)
                else:
                    page_goto = page_range[t - 1] + 1
                    page_range.insert(t, '...')
                t += 1
            t += 1
    pages.page_range_ex = page_range
    pages.page_goto = page_goto
    context_dict = {'names': names, 'pages': pages, 'get_par': get_par}
    return context_dict
Пример #6
0
def getPages(request, list1, limit=7):  # limit 每页显示的记录数
    # 未优化前
    # pages = Paginator(list1, limit)  # 实例化一个分页对象
    # page = request.GET.get('page',1)  # 获取GET请求的参数,得到当前页码。若没有该参数,默认为1
    # try:
    #     list1 = pages.page(page)  # 获取某页对应的记录
    # except PageNotAnInteger:  # 如果页码不是个整数
    #     list1 = pages.page(1)  # 取第一页的记录
    # except EmptyPage:  # 如果页码太大,没有相应的记录
    #     list1 = pages.page(pages.num_pages)  # 取最后一页的记录
    # return pages,list1

    # 优化后
    currentPage = request.GET.get('page', 1)
    paginator = Paginator(list1, limit)
    try:
        list1 = paginator.page(currentPage)  # 获取某页对应的记录
    except PageNotAnInteger:  # 如果页码不是个整数
        list1 = paginator.page(1)  # 取第一页的记录
    except EmptyPage:  # 如果页码太大,没有相应的记录
        list1 = paginator.page(paginator.num_pages)  # 取最后一页的记录
    page_range = []
    current = list1.number  #当前页码
    page_all = paginator.num_pages  #总页数
    mid_pages = 3  #中间段显示的页码数
    page_goto = 1  #默认跳转的页码

    #获取优化显示的页码列表
    if page_all <= 5 + mid_pages:
        #页码数少于6页就无需分析哪些地方需要隐藏
        page_range = paginator.page_range
    else:
        #添加应该显示的页码
        page_range += [1, page_all]
        page_range += [current - 2, current, current + 2]

        #若当前页是头尾,范围拓展多1页
        if current == 1 or current == page_all:
            page_range += [current + 2, current - 2]

        #去掉超出范围的页码
        page_range = filter(lambda x: x >= 1 and x <= page_all, page_range)

        #排序去重
        #此处list踩坑,原先list与形参list则会到会使list()优先形参解释,导致错误
        page_range = sorted(list(set(page_range)))

        #查漏补缺
        #从第2个开始遍历,查看页码间隔,若间隔为0则是连续的
        #若间隔为1则补上页码;间隔超过1,则补上省略号
        t = 1
        for i in range(len(page_range) - 1):
            step = page_range[t] - page_range[t - 1]
            if step >= 2:
                if step == 2:
                    page_range.insert(t, page_range[t] - 1)
                else:
                    page_goto = page_range[t - 1] + 1
                    page_range.insert(t, '...')
                t += 1
            t += 1

    #优化结果之后的页码列表
    paginator.page_range_ex = page_range
    #默认跳转页的值
    paginator.page_goto = page_goto

    return paginator, list1