我有点问题。 在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视图中加入分页。
答案 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();