在Django Rest Framework中,如何使用TemplateHTMLRenderer查看分页数据?

时间:2016-11-04 04:43:46

标签: python django python-3.x pagination django-rest-framework

我正在使用Django Rest Framework,我尝试使用doc example从API视图转换为TemplateHTMLResponse。我能够完成大部分内容并加载模板并传递所有数据,但是该过程的HTML方面的文档很少。

我遇到的问题是结果没有被分页。我能够访问和迭代所有数据,但我需要组织的分页。

views.py。

<form action="/'+allQuotes[x]._id+'/destroy" class="destroy" method="GET" mongoID="'+allQuotes[x]._id+'">
    <input type="submit" value="Delete">
</form>

objectlist.html

class BoxViewSet(viewsets.ModelViewSet):

    queryset = Uploadobject.objects.all().exclude(verified=False)
    serializer_class = BoxSerializer
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,
                            IsBox)

    #renderer_classes = (renderers.TemplateHTMLRenderer)
    def list(self, request):
        queryset = Uploadobject.objects.all().exclude(verified=False)


        page = self.paginate_queryset(queryset)
        if page is not None:
            serializer = self.get_serializer(page, data=request.data)

            if serializer.is_valid():

                serdata = self.get_paginated_response(serializer.data)
                data= {'objects': queryset,
                    'serializers': serializer}
                return Response(data, template_name='restframework/objectlist.html')

我尝试过很多东西,包括ListModelMixin,并按照pagination docs的建议创建自定义分页脚本,但似乎没有任何内容可以通过。我读到有从Django分页的方法,但我认为保持Django Rest Framework中的所有分页将更简单。据我所知,我有正确的后端数据,只需要纠正HTML。总结一下,在模板页面的分页设置中显示所有模型数据的最简单方法是什么?

1 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为即使您使用DRF方法对查询集进行了分页,您仍然会使用原始查询集发送响应。

这样的事情应该有效:

renderer_classes = (renderers.TemplateHTMLRenderer, )

def list(self, request):
    queryset = Uploadobject.objects.all().exclude(verified=False)
    page = self.paginate_queryset(queryset)
    if page is not None:
        serializer = self.get_serializer(page, data=request.data)
        return self.get_paginated_response(serializer.data)
    data= {'objects': queryset, 'serializers': serializer}
    return Response(data, template_name='restframework/objectlist.html')