代码之家  ›  专栏  ›  技术社区  ›  doctorsherlock Owen

使用无限滚动与Django Rest Framework?

  •  4
  • doctorsherlock Owen  · 技术社区  · 9 年前

    我正在使用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框架提供的分页。我也不确定这个前端将如何工作。网站开发新手请在此帮助。

    2 回复  |  直到 9 年前
        1
  •  9
  •   Amrullah Zunzunia    9 年前

    创建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 , ?page=2 将把第21家公司交给第40家公司,以此类推。(未具体说明 ?page= ?page=1 )

    在您的 AngularJS 另一方面,您将维护一些变量,它将保存下一个要获取的页码。现在您可以将API请求绑定到 加载更多内容 按钮的类型,或者您可以检测用户是否已滚动到底部,然后执行API请求并获取下一组 Company 物体。

    注:

    不强制使用 PageNumberPagination ,您甚至可以使用 LimitOffsetPagination CursorPagination 以实现您的目标。阅读有关各种分页样式的更多信息 here

        2
  •  2
  •   Linovia    9 年前

    你应该付出 CursorPagination 一次尝试。 我不知道它到底是无限的还是非无限的,但它绝对适用于大集合。