Python 使用带有Django';帕吉纳托
Django的Paginator是否可以使用Python生成器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
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的大部分,以改变它可以合理有效地处理这两个问题的假设。