DjangoとPythonが初めてのので、まずQuerySetからすべてのレコードを取得せずにページングを実行する方法を理解しようとしています。 QuerySetsで見たすべての例は、まず以下のようにすべてのレコードを取得します。スライス付きのDjangoページング
tickets = Ticket.objects.filter(site=site.id)
paginator = Paginator(tickets, settings.PAGE_SIZE)
これは、ページャーに必要なページ数を参照するように意味があるようです。しかし、これは、各ページ要求に対してすべてのレコードを取得することは効率的ではないようです。 QuerySetsをスライスして一連のレコードを返すことができます。
ページングを設計してそのページ(スライシング?)に関連するレコードを取得するだけですが、まだページング機能はありますか?
編集:反復するテンプレートコードが追加されました。
{% for ticket in tickets.object_list %}
{{ ticket }}<br/>
{% endfor %}
参考までに、クエリーセットの実行タイミングについてはhttp://docs.djangoproject.com/en/dev/ref/models/querysets/#when-querysets-are-evaluatedを参照してください。 –
応答をありがとう - テンプレートにforループを含めるように質問を変更しました。あなたは実際にforループを実行するまでSQLに問い合わせていないと言っていますか?もしそうなら、私はページャーがどのくらい多くのページを知っているか理解していません。 –
@Steve Suh - Ticket.objects.filter(...)が返すクエリセットオブジェクトがある場合は、queryset.count()を別々に呼び出すことができ、別のCOUNT(*)クエリを発行します。これがページネーションがやっていることです。 –