【问题标题】:Disable pagination in Django tastypie?在 Django 美味派中禁用分页?
【发布时间】:2013-03-25 14:17:09
【问题描述】:

我有一个正在开发的美味 api,在我的 api 资源的列表视图中,我想在不应用分页的情况下获取整个数据列表,无论列表中的对象数量如何。我不需要具有上限的自定义分页器,我想完全禁用分页。

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

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

【问题讨论】:

  • 您能否澄清一下拉取请求对我的问题的看法?该线程中似乎有关于分页限制的讨论,但阅读它我不清楚我应该做什么来禁用分页。我应该将 settings.API_LIMIT_PER_PAGE 设置为 None,我应该将 settings.API_MAX_LIMIT_PER_PAGE 设置为 None,是否可以写入资源的 Meta 类来禁用限制等...?最初的拉取请求是为不熟悉美味派底层机制的人编写的,令人困惑,后续的 cmets 并没有真正澄清太多。

标签: python django pagination tastypie


【解决方案1】:

为此,您需要设置至少两个不同的东西。

在站点设置文件中,设置

API_LIMIT_PER_PAGE = 0

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

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

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

【讨论】:

    【解决方案2】:

    另一种解决方案是定义 DummyPaginator 类(最初在此处描述:https://github.com/toastdriven/django-tastypie/issues/777),它应该是tastepie的一部分(但不幸的是……):

    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
    

    【讨论】:

    • 嘿,页面函数不应该嵌套在 init 函数中
    猜你喜欢
    • 2012-04-18
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 2014-03-15
    • 2012-10-30
    • 2014-01-23
    • 1970-01-01
    • 2012-04-05
    相关资源
    最近更新 更多