【发布时间】:2013-04-16 05:13:36
【问题描述】:
有一些用于 django 分页的代码示例,我不久前使用过。我可能错了,但是在查看代码时,它看起来会浪费大量内存。我一直在寻找更好的解决方案,代码如下:
# in views.py
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
...
...
def someView():
models = Model.objects.order_by('-timestamp')
paginator = Paginator(models, 7)
pageNumber = request.GET.get('page')
try:
paginatedPage = paginator.page(pageNumber)
except PageNotAnInteger:
pageNumber = 1
except EmptyPage:
pageNumber = paginator.num_pages
models = paginator.page(pageNumber)
return render_to_resp ( ..... models ....)
我不确定这段代码的细微之处,但从它的外观来看,第一行代码从数据库中检索每个模型并将其推入。然后它被传递到 Paginator,它根据用户在 html GET 中所在的页面将其分块。分页器是否以某种方式使其可以接受,或者这完全是内存效率低下的?如果效率低下,如何改进?
另外,一个相关的话题。如果有人这样做:
Model.objects.all()[:40]
这段代码是否意味着所有模型都被推入内存,我们拼接出其中的 40 个?哪个不好。还是说我们只查询并推送40个对象到内存周期?
感谢您的帮助!
【问题讨论】:
标签: python django pagination querying