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
网友评论