有一些用于 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 个对象推送到内存期?
谢谢您的帮助!