Django-12-分页

2020-04-07  本文已影响0人  西海岸虎皮猫大人

1.原生分页

使用切片的方式,获得总记录数,根据总记录数计算总结果数,对结果记录进行切片处理

def page(num, size=20):
    # 接收当前页码数
    num = int(num)
    # 总记录数
    totalRecods = Movie.objects.count()
    # 总页数
    totalPages = int(math.ceil(totalRecods*1.0/size))
    # 判断是否越界
    if num<1:
        num = 1
    if num>totalPages:
        num = totalPages
    # 计算每页显示的记录
    movies = Movie.objects.all()[((num-1)*size):(num*size)]
    return movies, num



def index_view(request):
    # 接收分页参数
    num = request.GET.get('num', 1)
    movies, n = page(num)
    return render(request, 'index01.html', {'movies':movies, 'num': n})

2.使用paginator进行分页

视图
def pagen(num):
    n = int(num)
    movies = Movie.objects.all()
    paginator = Paginator(movies, 20)
    try:
        t_per_page = paginator.page(n)  # 获取当前页码的记录
    except PageNotAnInteger:  # 如果用户输入的页码不是整数时,显示第1页的内容
        t_per_page = paginator.page(1)
    except EmptyPage:  # 如果用户输入的页数不在系统的页码列表中时,显示最后一页的内容
        t_per_page = paginator.page(paginator.num_pages)

    # 开始页码,当前页减5
    begin = (n - int(math.ceil(10.0 / 2)))
    # 如果为负则从第一页开始
    if begin < 1:
        begin = 1

    # 结束页码,开始页加9
    end = begin + 9
    # 如果大于总页数则等于最后一页
    if end > paginator.num_pages:
        end = paginator.num_pages

    if end <= 10:
        begin = 1
    else:
        begin = end - 9

    page_list = range(begin, end + 1)
    return paginator, t_per_page, page_list, n
页面
def pagen(num):
    n = int(num)
    movies = Movie.objects.all()
    paginator = Paginator(movies, 20)
    try:
        t_per_page = paginator.page(n)  # 获取当前页码的记录
    except PageNotAnInteger:  # 如果用户输入的页码不是整数时,显示第1页的内容
        t_per_page = paginator.page(1)
    except EmptyPage:  # 如果用户输入的页数不在系统的页码列表中时,显示最后一页的内容
        t_per_page = paginator.page(paginator.num_pages)

    # 开始页码,当前页减5
    begin = (n - int(math.ceil(10.0 / 2)))
    # 如果为负则从第一页开始
    if begin < 1:
        begin = 1

    # 结束页码,开始页加9
    end = begin + 9
    # 如果大于总页数则等于最后一页
    if end > paginator.num_pages:
        end = paginator.num_pages

    if end <= 10:
        begin = 1
    else:
        begin = end - 9

    page_list = range(begin, end + 1)
    return paginator, t_per_page, page_list, n
上一篇下一篇

猜你喜欢

热点阅读