技术博客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)

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号