Django Academy · レッスン

Paginatorクラス

querysetをページに分割します

レッスン 1/413 ステップ

「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 Paginator

Paginatorを作成する

完全なquerysetと、1ページあたりの項目数を渡します。ここでは、各ページに10件の記事を表示します。

articles = Article.objects.all()
paginator = Paginator(articles, 10)

ページ数を数える

num_pagesを使って、Paginatorにページ数を尋ねます。切り上げられるため、1ページ10件で25件ある場合は3ページになります。

paginator.num_pages  # 3

1ページを取得する

ページ番号を指定して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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Paginatorクラス
  2. ListViewのページ操作
  3. TestCaseとアサーションの記述
  4. Test ClientとFixtures
← Django Academyに戻る