Angular和Django Rest框架。 api中的分页问题

时间:2015-12-03 19:24:50

标签: angularjs django django-rest-framework

我有点问题。 在Rest框架设置中,我有:

REST_FRAMEWORK = {
    "DEFAULT_PERMISSION_CLASSES": ("rest_framework.permissions.IsAdminUser",),
    "PAGE_SIZE": 50,
    "DEFAULT_AUTHENTICATION_CLASSES": (
        'rest_framework.authentication.BasicAuthentication',
        'banner_compare.authentication.CsrfExemptSessionAuthentication',
    )
}

在我的API视图中,我有这一行:(我在API中有几页,每页有50个元素)

 "next": "http://0.0.0.0:8000/api/something/?page=2",

角度服务:

  .factory('Something',["$resource", function ($resource){
return $resource(
    "/api/something/:something_id/", {something_id: '@id'},
    {
        query: {
            isArray: true,
            transformResponse: function (data) {
                var items = angular.fromJson(data);
                return items.results;
            }
        },
        update: {
            method: "PUT",
        }
    },
    {
        stripTrailingSlashes: false
    }
);
}])

现在,当我试图获得所有这些元素时

$scope.somethings = Something.query();

我只得到这50个第一个元素。我只从API获得第一页。 如果没有这样的东西我怎么能得到所有这些元素:

"PAGE_SIZE": 50000000,

:)

但我也希望在API视图中加入分页。

2 个答案:

答案 0 :(得分:1)

PAGINATE_BY_PARAM中指定settings.py

REST_FRAMEWORK = {
    [...]
    'PAGINATE_BY_PARAM': 'page_size',
}

然后,您可以在任何请求上附加&page_size=42之类的内容。

答案 1 :(得分:0)

如果我是你,我会在从服务器检索页面后抓取每个连续的页面。通过这种方式,您的Web应用程序也将更具响应性,而不是等待巨大的查询。

例如:

$scope.grabPage = function(page) {
    page = page || 1;
    Something.query(
      {page:page},
      function(result) {
        $scope.somethings = $scope.somethings.concat(result);
        $scope.grabPage(page + 1);
      }
    );
};
$scope.somethings = [];
$scope.grabPage();