【发布时间】:2015-10-04 08:28:20
【问题描述】:
所以我正在阅读关于分页的内容,我已经写了很多次这个应用程序,但我想知道 django 中的分页是如何在 sql 级别工作的。
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
def listing(request):
contact_list = Contacts.objects.all()
paginator = Paginator(contact_list, 25) # Show 25 contacts per page
page = request.GET.get('page')
try:
contacts = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
contacts = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
contacts = paginator.page(paginator.num_pages)
return render_to_response('list.html', {"contacts": contacts})
Contacts.objects.all() 每次我点击视图时都会被调用吗?
还是Paginator 以某种方式保持状态? paginator = Paginator(contact_list, 25) 的 sql 查询会是什么样子?是否在幕后使用了生成器并且事情被延迟评估?
对不起,如果这是一个愚蠢的问题,Django 中有很多抽象,我似乎错过了背后的所有动作。 提前致谢
【问题讨论】:
-
分页器不会在请求之间维护服务器上的状态——为每个请求实例化一个新的分页器。我认为我链接到的重复问题可以回答您的其余问题。
标签: python sql django pagination lazy-evaluation