【问题标题】:How to paginate with django-rest-framework and ng-admin如何使用 django-rest-framework 和 ng-admin 进行分页
【发布时间】:2018-01-02 02:12:32
【问题描述】:

抱歉,这是一个愚蠢的问题,因为它已包含在文档中,但我无法使其工作(我是 AngularJS 的新手)。

我正在尝试在 django-rest-framework 之上使用 ng-admin 为我的数据库编写一个接口。问题是 ng-admin 中的默认分页类似于_page=1&_perPage=30,而在 django-rest-framework 中则是?limit=30&offset=1。因此,当 ng-admin 尝试获取它时,它会收到 301 响应。在文档中它说:

例如,要在整个应用程序中使用 offset 和 limit 而不是 _page 和 _perPage,请使用以下代码:

myApp.config(['RestangularProvider', function(RestangularProvider) {
   RestangularProvider.addFullRequestInterceptor(function(element, operation, what, url, headers, params, httpConfig) {
       if (operation == 'getList' && what == 'entityName') {
           params.offset = (params._page - 1) * params._perPage;
           params.limit = params._perPage;
           delete params._page;
           delete params._perPage;
        }
        return { params: params };
    }); 
}]);

问题是我不知道如何将它合并到我的代码中,即:

var myApp = angular.module('myApp', ['ng-admin']);
myApp.config(['NgAdminConfigurationProvider', function (nga) {
    var admin = nga.application('My First Admin')
        .baseApiUrl('http://localhost:8000/CSP_site/'); 
    var algae = nga.entity('algae');
    algae.listView().fields([
        nga.field('name'),
        nga.field('id'),
    ]);
    admin.addEntity(algae);
    nga.configure(admin);
}]);

任何提示将不胜感激。

谢谢!

【问题讨论】:

    标签: angularjs django-rest-framework ng-admin


    【解决方案1】:

    这应该为你做:

    var myApp = angular.module('myApp', ['ng-admin']);
    myApp.config(['NgAdminConfigurationProvider', 'RestangularProvider', function (nga, RestangularProvider) {
        var admin = nga.application('My First Admin')
            .baseApiUrl('http://localhost:8000/CSP_site/'); 
        var algae = nga.entity('algae');
        algae.listView().fields([
            nga.field('name'),
            nga.field('id'),
        ]);
        admin.addEntity(algae);
        nga.configure(admin);
    
        RestangularProvider.addFullRequestInterceptor(function(element, operation, what, url, headers, params, httpConfig) {
            if (operation == 'getList' && what == 'algae') {
                params.offset = (params._page - 1) * params._perPage;
                params.limit = params._perPage;
                delete params._page;
                delete params._perPage;
            }
            return { params: params };
        }); 
    }]);
    

    在数组的第二个索引中添加了RestangularProvider,将其作为.config函数的第二个参数注入。

    除了what == 'entityName'之外,其余的都是复制粘贴,它变成了what == 'algae',因为algae是你上面添加的实体。

    希望对你有帮助。

    【讨论】:

    • 感谢您的快速回放,但不幸的是它仍在尝试 GET _page _perPage... 不知道为什么!! Django 1.11 版,使用设置 'CSP.settings' 在127.0.0.1:8000 启动开发服务器@ 使用 CONTROL-C 退出服务器。 [02/Jan/2018 02:30:57] "GET /CSP_site/algae?_page=1&_perPage=30&_sortDir=DESC&_sortField=id HTTP/1.1" 301 0 有什么建议吗?
    • 哦,这可能是因为if 条件。我更新了答案,检查最后几行。
    • 哦!我明白了……谢谢!我想我明白问题所在了!现在还有别的东西……仍然是 301,但原因不同。 GET /CSP_site/algae?_page=1&_perPage=30&_sortDir=DESC&_sortField=id HTTP/1.1" 301 0 在藻类之后缺少/...经过几次试验后,我能得到的最好的结果是 GET /CSP_site/algae%2F ?_sortDir=DESC&_sortField=id&limit=30&offset=0 HTTP/1.1 知道如何在请求中的藻类之后添加/ 吗?
    • 嗯,你不能在你请求的 URL 中添加一个/ 吗?比如<a href="/CSP_site/algae/">URL<a/>
    • 谢谢,但我阅读了一些文档,我想我必须从 djang-rest 路由器站点修复它...再次感谢您的帮助
    猜你喜欢
    • 2017-09-11
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 2016-07-03
    • 2021-07-12
    相关资源
    最近更新 更多