如何在不使用REST框架的情况下在Django和React应用中实现分页?

时间:2019-06-21 10:17:40

标签: python django reactjs django-pagination

我正在一个网站,其后端是Django,而前端是使用React开发的。我想在网站上添加分页功能,但不知道它将如何在前端部分中实现。

我要将页面总数发送到react应用。

到目前为止,我已经在自己的视图函数中编写了以下代码

def index(request):
    influencers = Influencer.objects.all()

    paginator = Paginator(influencers,16)
    page = request.GET.get('page')
    paged_listings = paginator.get_page(page)
    user_list = UserList.objects.all().filter(user_id = request.user.id)

    queryset = list(chain(paged_listings,user_list),paginator.count)
    ser_query = serializers.serialize('json', queryset)
    return HttpResponse(ser_query)

我也不使用REST框架来开发后端站点。

我想知道我必须发送到React前端站点的哪些信息才能起作用。我应该如何进行?

1 个答案:

答案 0 :(得分:1)

我建议您使用django-rest-framework,因为分页可能更容易。

但是,如果您想避免传递自己的结构(显然,您可能需要传递其他信息,例如下一页/上一页等)。

这里的挑战是确保所有内容都是JSON可序列化的-这意味着对于Queryset,您必须使用.values()并将结果包装在list()中。对于Paginator,您需要使用list()包装。

from django.http.response import JsonResponse

def index(request):
    influencers = Influencer.objects.all().values()

    paginator = Paginator(influencers,16)
    page = request.GET.get('page')
    paged_listings = paginator.get_page(page)
    user_list = UserList.objects.all().filter(user_id = request.user.id).values()

    queryset = list(chain(paged_listings,user_list),paginator.count)
    content = {'total_page_count': paginator.num_pages, 'data': queryset}
    return JsonResponse(content)