2013-04-03 65 views
8

我有一个tastypie api,我正在为我的api资源工作,并且在列表视图中,我希望获得没有应用分页的整个数据列表,无论列表中有多少个对象。我不需要一个具有高限制的自定义分页程序,我想完全禁用分页。在Django tastypie中禁用分页?

我可能会修改我的客户端来处理分页(api是从一个C++ DLL而不是一个web浏览器访问的,所以它有点复杂但可能),但如果我可以禁用它,那会更容易。

是否有切换为不同的资源禁用Paginator,或者可能是一个API宽开关禁用所有注册到该API对象资源的分页?

+0

https://github.com/toastdriven/django- tastypie/pull/639 – catherine 2013-04-03 18:49:55

+1

你能否澄清一下拉请求对我的问题所说的话?似乎有关于该线程的分页限制的讨论,但阅读它我不清楚我应该做什么来禁用分页。我是否应该将settings.API_LIMIT_PER_PAGE设置为None,是否应将settings.API_MAX_LIMIT_PER_PAGE设置为None,是否可以将某些内容写入资源的Meta类中,以禁用限制等。对于不熟悉tastypie的基本机制的人来说,最初的拉取请求很容易写出来,后续评论并没有真正阐明。 – Alex 2013-04-05 15:05:27

回答

10

要做到这一点,你需要设置至少两个不同的东西。

在站点设置文件,设置

API_LIMIT_PER_PAGE = 0 

在要禁用分页资源元类,设置:

class MyResource(ModelResource): 
    ... 
    class Meta: 
     ... 
     max_limit = None 

然后,如果你浏览到的列表视图资源,返回的内容应显示为0的限制。

3

另一种解决方案是定义DummyPaginator类(最初在此处描述:https://github.com/toastdriven/django-tastypie/issues/777),其中sho ULD是tastypie的一部分(但不是很遗憾...):

class DummyPaginator(object): 
    def __init__(self, request_data, objects, resource_uri=None, 
       limit=None, offset=0, max_limit=1000, 
       collection_name='objects'): 
     self.objects = objects 
     self.collection_name = collection_name 

    def page(self): 
     return { self.collection_name: self.objects, } 

然后,在你的资源元,可以设置:

paginator_class = DummyPaginator 
+0

嘿,页面函数不应该嵌套在__init__函数 – 2013-06-04 10:16:41

+0

@GeorgeThomas - 更正,谢谢! – mnowotka 2013-06-04 11:19:49