Были некоторые примеры кода для django pagination, которые я использовал некоторое время назад. Возможно, я ошибаюсь, но, просматривая код, похоже, что он уничтожает тонны памяти. Я искал лучшее решение, вот код:
# 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. Является ли paginator каким-то образом это приемлемым, или это полностью неэффективно? Если это неэффективно, как его можно улучшить?
Также, связанная тема. Если кто-то делает:
Model.objects.all()[:40]
Означает ли этот код, что все модели вставляются в память, и мы собиваем 40 из них? Что плохо. Или это означает, что мы запрашиваем и нажимаем только 40 объектов в период памяти?
Благодарим за помощь!