Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用带有Django';帕吉纳托_Python_Django_Pagination_Generator_Paginator - Fatal编程技术网

Python 使用带有Django';帕吉纳托

Python 使用带有Django';帕吉纳托,python,django,pagination,generator,paginator,Python,Django,Pagination,Generator,Paginator,Django的Paginator是否可以使用Python生成器 generator = get_response() paginator = Paginator(generator, 10) 例如,假设我有一个生成器,它会自动将请求分页到API,如以下伪代码: def get_response(): page_one = requests.get('http://example.com/json?page=1') for item in page_one: yi

Django的Paginator是否可以使用Python生成器

generator = get_response()
paginator = Paginator(generator, 10)
例如,假设我有一个生成器,它会自动将请求分页到API,如以下伪代码:

def get_response():
    page_one = requests.get('http://example.com/json?page=1')
    for item in page_one:
        yield item

    page_two = requests.get('http://example.com/json?page=2')
    for item in page_two:
        yield item
Django的Paginator是否可以扩展以支持此生成器

generator = get_response()
paginator = Paginator(generator, 10)
我知道这种方法会奏效:

paginator = Paginator(list(generator), 10)

我的理解是,直接传递生成器会更有效,因为API客户机在需要时才会发出请求。虽然我知道分页器需要一个
count()
\uuu len\uuu()
方法,这可能会使这变得不可能。

您可能会这样做,但它的用途有限

Paginator类中分割列表以创建页面的部分位于。它通过对象列表的切片来实现这一点;但显然,生成器不支持切片


因此,您唯一能做的就是替换整个方法,而不是切片,您必须在生成器上反复调用
next
,直到到达您想要的页面。在整个对象列表上调用
list()
会让您受益匪浅,但是您需要替换的代码量可能根本不值得使用这个类。

Alex,您需要更新您的配置文件……除了长度检查之外,分页器还使用切片表示法来获取每个页面。我认为您最终会重新实现paginator的大部分,以改变它可以合理有效地处理这两个问题的假设。