在Django tastypie中禁用分页?

时间:2013-04-03 18:43:01

标签: python django pagination tastypie

我有一个正在研究的tastypie api,在我的api资源的列表视图中,无论列表中的对象数量多少,我都希望获得不应用分页的整个数据列表。我不需要具有上限的自定义分页器,我想完全禁用分页。

我可能会修改我的客户端以处理分页(api是从C ++ DLL而不是Web浏览器访问的,因此它有点复杂但可能)但如果我可以禁用它会更容易。< / p>

是否有一个开关来禁用不同资源的paginator,或者可能是一个api wide开关来禁用注册到该api对象的所有资源的分页?

2 个答案:

答案 0 :(得分:10)

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

在网站设置文件中,设置

API_LIMIT_PER_PAGE = 0

在要禁用分页的资源Meta类中,设置:

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

然后,如果您导航到资源的列表视图,则返回的内容应显示限制为0。

答案 1 :(得分:3)

替代解决方案是定义DummyPaginator类(最初在这里描述:https://github.com/toastdriven/django-tastypie/issues/777),它应该是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, }

然后,在您的资源Meta中,设置:

 paginator_class = DummyPaginator