使用Django Rest Framework的无限滚动?

时间:2016-07-03 20:20:58

标签: python django rest django-rest-framework infinite-scroll

我正在使用Django Rest Framework创建REST API。 API将提供大量数据,我想在页面上使用无限滚动。我想使用Angular作为前端。我不确定如何提供数据,以便不是所有数据都必须发送一次,而是仅在用户向下滚动时。

我正在使用序列化程序类 -

class CompanySerializer(serializers.ModelSerializer):
    class Meta:
        model = Company
        fields = ('company_name', 'location', 'founded_year')

我不确定如何实现这一点。我应该使用Django Endless Pagination还是可以通过使用django-rest-framework提供的分页来完成。我也不确定这个前端如何运作。网站开发新手在这里,请帮忙。

2 个答案:

答案 0 :(得分:3)

创建ListAPIView子类

from rest_framework import pagination, generics

class CompanyPagination(pagination.PageNumberPagination):
    page_size = 20  # the no. of company objects you want to send in one go

# Assume url for this view is /api/v1/companies/
class CompanyListView(generics.ListAPIView):
    queryset = Company.objects.all()
    serializer_class = CompanySerializer
    pagination_class = CompanyPagination

完成此操作后,您可以通过拨打http://your_domain.com/api/v1/companies/?page=1获得前20名,?page=2将第21家公司提供给第40家公司,依此类推。 (未指定?page=就像执行?page=1

AngularJS方面,您将保留一些变量,该变量将保存下一个要获取的页码。现在,您可以将API请求绑定到某些加载更多类型按钮上的点击事件,或者可以检测用户是否已滚动到底部,然后执行API请求并获取下一组Company个对象。

注意:

使用PageNumberPagination并非强制要求,您甚至可以使用LimitOffsetPaginationCursorPagination来实现目标。阅读有关各种分页样式的更多信息here

答案 1 :(得分:1)

您应该尝试CursorPagination。 我不确切地知道它是否是无限的,但它绝对是巨大的集合。