Search code examples
angularjsdjangopaginationdjango-rest-frameworkrestangular

How to add pagination in Restangular and Django Rest Framework?


In DRF I have added pagination limit to 100 'PAGINATE_BY': 100, since Restangular expects results in array form, I had to use the below meta extractor function in my angular app module

var app = angular.module("myapp", ["restangular"].config(function(
            RestangularProvider){

  RestangularProvider.setResponseExtractor(function(response, operation, what, url) {
    if (operation === "getList") {
        var newResponse = response.results;
        newResponse._resultmeta = {
            "count": response.count,
            "next": response.next,
            "previous": response.previous
        };
        return newResponse;
    }

    return response;
    });
});

and my controller looks like

app.controller('DataCtrl',function($scope, Restangular){

    var resource = Restangular.all('myapp/api/dataendpoint/');
        resource.getList().then(function(data){
        $scope.records = data;
    });    
}

Meta info is not available in controller, how do I paginate if there are more than 100 records available?


Solution

  • I suppose you could simply call:

    RestangularProvider.addResponseExtractor(function(data, operation, what, url, response) {
      if (operation === "getList") {
          data._resultmeta = {
              "count": response.count,
              "next": response.next,
              "previous": response.previous
          };
          return data;
      }
    
      return response;
    });
    

    and

    var page = 2;
    var resource = Restangular.all('myapp/api/dataendpoint/');
    resource.getList({page: page}).then(function(data){
      console.log(data._resultmeta.next ? 'there is more pages' : 'You reach the end');
    });
    

    I'm not usual with Rectangular but Django Rest Framework support pagination from query parameter