技术博客6--Django实现列表分页
技术博客
Django框架下列表分页
模型市场在进行模型展示时需要实现一个分页列表,使用Django框架实现。
1. 接口设计
请求消息
GET /api/market/market? HTTP/1.1
请求参数
http 请求消息需要携带如下参数:
-
page
当前所处页数
-
pagesize
每页显示的模型数
响应消息
HTTP/1.1 200 OK
Content-Type: application/json
响应内容
http 响应消息 body 中, 数据以json格式存储,
如果获取信息成功,返回如下
{
'networklist': list(page_network_list), # 页对象列表
'page_num': range(1, page_num), # 1~最大页数的数组
'cur_page': page, # 当前所在页数
'next_page': next_page, # 下一页的页数
'previous_page': previous_page # 上一页的页数
}
2. 代码实现
获取参数
此处获取参数并对参数进行简单处理。
def get(self, request):
pagesize = request.GET.get('pagesize')
if pagesize:
pagesize = int(pagesize)
else:
pagesize = 10
page = request.GET.get('page')
if page:
page = int(page)
else:
page = 1
引入Django分页组件
from django.core.paginator import Paginator; #重点
def get(self, request):
pagesize = request.GET.get('pagesize')
if pagesize:
pagesize = int(pagesize)
else:
pagesize = 10
page = request.GET.get('page')
if page:
page = int(page)
else:
page = 1
network_list = Network.objects.filter(Q(shared=True) & Q(sharable=True)).values('id', 'name', 'description', 'png')
paginator = Paginator(network_list, pagesize) # 根据指定的每页列表大小进行分页
page_network_list = paginator.page(page) # 根据页数获取特定页的列表
page_num = paginator.num_pages
if page_network_list.has_next():
next_page = page + 1
else:
next_page=page
if page_network_list.has_previous():
previous_page = page - 1
else:
previous_page = page
data = {
'networklist': list(page_network_list),
'page_num': range(1, page_num),
'cur_page': page,
'next_page': next_page,
'previous_page': previous_page
}
return Response(data=data, content_type='application/json', status=status.HTTP_200_OK)