2016-01-13 82 views
0

https://django-endless-pagination.readthedocs.org/en/latest/twitter_pagination.html我讀的例子views.py可能是這樣的:不調用Entry.object.all()打敗Django無盡的分頁點嗎?

from endless_pagination.decorators import page_template 

@page_template('myapp/entry_index_page.html') # just add this decorator 
def entry_index(
     request, template='myapp/entry_index.html', extra_context=None): 
    context = { 
     'entries': Entry.objects.all(), 
    } 
    if extra_context is not None: 
     context.update(extra_context) 
    return render_to_response(
     template, context, context_instance=RequestContext(request)) 

這似乎表明,我們必須調用Entry.objects.all()並將結果傳遞給模板。但是Entry.objects.all()已經使查詢調用檢索所有相應的數據庫對象,從而破壞了分頁的一個主要目標(一次檢索小塊數據)?

+0

查詢集很懶。我不知道這個評估的時間(因此不能提供一個可靠的答案),但是在使用'.all()'後可以繼續'.filter()'。 –

回答

3

Django中的查詢是懶惰的,這意味着Entry.objects.all()不會提供完整的條目列表,它只是指定Endless將顯示的結果範圍。

+0

'Entry.objects.all()[0:10]'執行查詢嗎? – personjerry

+0

@personjerry是的,Entry.objects.all()[0:10]將使用LIMIT在SQL上執行查詢。 –