技术博客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)
posted @ 2020-05-27 16:06  ITAS2024  阅读(182)  评论(0编辑  收藏  举报