Paginatorクラス
querysetをページに分割します
「Paginatorクラス」はCoddyKit上の無料Django Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDjango Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Django Academyコースには全4レッスンが含まれています。
ページ分割する理由
5,000行を1ページに表示すると、処理が遅く、圧倒されてしまいます。ページネーションは長いリストを、ユーザーが閲覧しやすい大きさのページに分割します。📄
Paginatorの紹介
Djangoには計算を代わりに行うPaginatorクラスが用意されています。リストとページサイズを渡すと、データをページに分割します。
from django.core.paginator import PaginatorPaginatorを作成する
完全なquerysetと、1ページあたりの項目数を渡します。ここでは、各ページに10件の記事を表示します。
articles = Article.objects.all()
paginator = Paginator(articles, 10)ページ数を数える
num_pagesを使って、Paginatorにページ数を尋ねます。切り上げられるため、1ページ10件で25件ある場合は3ページになります。
paginator.num_pages # 31ページを取得する
ページ番号を指定してget_page()を呼び出すと、1ページ分のデータを取得できます。そのページの項目だけを含むPageオブジェクトが返されます。
page = paginator.get_page(2)ページをループする
Pageは反復可能なので、リストと同じようにループできます。扱うのはそのページの項目だけで、5,000件すべてに触れることはありません。
for article in page:
print(article.title)get_pageは柔軟
誰かが999ページや"abc"という文字列を渡しても、get_page()はエラーを起こさず、最後または最初の有効なページを返します。
現在位置を知る
ページは自分の位置を把握しています。現在のページを表すnumberを読み取れば、ナビゲーションバーで現在のページを強調表示できます。
page.number # 2次へと前へ
has_next()とhas_previous()を使って、テンプレートに次のページへのリンクや戻るリンクを表示するかどうかを判断します。
page.has_next()
page.has_previous()前後のページ
次のページがあるとわかったら、next_page_number()でリンク先のページ番号を取得できます。previous_page_number()は前のページについて同じ処理を行います。
page.next_page_number() # 3ビューに組み込む
ビューでクエリ文字列から要求されたページを読み取り、そのpageをテンプレートコンテキストに渡します。
num = request.GET.get('page')
page = paginator.get_page(num)簡単な確認
23件の項目があり、ページサイズが10だとします。計算を確認してみましょう。
まとめ
Paginatorについて学びました。querysetとページサイズを渡し、get_page()でページを取得し、num_pages、number、has_next()を使ってナビゲーションを作成します。🎉
AI チューターと学ぶ Python — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 30
- レッスン
- 120
よくある質問
「Paginatorクラス」レッスンは無料ですか?
はい。「Paginatorクラス」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Django Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Django Academyコースには全4レッスンが含まれています。
「Paginatorクラス」で何を学びますか?
querysetをページに分割します ブラウザで直接実行するハンズオンコードでDjango Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Django Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDjango Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「Paginatorクラス」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDjango Academyレッスンでコードを書いて実行できますか?
はい。すべてのDjango Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。