しばらく前に使用した 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 個のオブジェクトのみをメモリ期間にプッシュするということですか?
ご協力ありがとうございました!