python 分页

分页需求分析:
1, 最多显示10页
2, 当页数是第一页时,不显示上一页
3, 当页数是最后一页,不显示下一页。
4, 当页数是1到6时,始终显示1到10页。
5, 当页数是最后5页是,始终显示最后10页。
6, 当页数在中间的时候 ,即不是前5页,也不是最后5页时,当前页始终显示在中间。起始和结束页,随着当前页的变化而变化。
7, 直接输入页码,直接调到相应的页面。

分析
问题转换为,找到起始页码和结束页码。		5 = 10 / 2 
1   2   3   4   5   6   7   8   9   10  当前页在1到6时,始终显示1--10
	2   3   4   5   6   7   8   9   10   11  第七页, start = 7-5   end = 7+ 4 = 7 + 5 -1
		3   4   5   6   7   8   9   10   11   12   第8页 start = 8-5  end = 8+5-1
			4   5   6   7   8   9   10   11   12   13 当页数9 10 11 12 13时,start = 4 = 13 - 10 + 1  end = 最大页数
			
最多显示10页,如果只有5页呢。?
永远都是显示1 2 3 4 5 
总页数,小于最大显示页数。

伪代码。
约定: 
显示的最大页数: max_page
当前页: current_page
最大页数: num_pages
起始页: start
结束页: end
已知:max_page ,current_page,num_pages求start,end
中间值 middle = max_page / 2 
if num_pages < max_page:
	start = 1
	end = num_pages
else:
	if current_page <= middle:
		start = 1
		end = max_page
	elif current_page> middle & current_page < num_pages - middle + 1
		start = current_page - middle 
		end = current_page + middle -1
	else:
		start = num_pages - max_page +1
		end = num_pages
		
return start, end 
# 实现自定义分页
import math


def custom_paginator(current_page, num_page, max_page=10):
    middle = math.ceil(max_page / 2)
    # 一种特殊情况
    # 总页数,小于最大页数
    if num_page < max_page:
        start = 1
        end = num_page
    else:
        # 一般情况
        # 当前页在头部的时候
        if current_page <= middle:
            start = 1
            end = max_page
        # 当前页在中间时
        elif (current_page > middle) & (current_page < num_page - middle + 1):
            start = current_page - middle
            end = current_page + middle - 1
        else:
            # 当前页在尾部
            start = num_page - max_page + 1
            end = num_page
    return start, end

你可能感兴趣的:(python)