Django Academy · レッスン

get_querysetとTemplatesのオーバーライド

ビューごとにデータとテンプレート名をカスタマイズします

レッスン 4/413 ステップ

「get_querysetとTemplatesのオーバーライド」はCoddyKit上の無料Django Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDjango Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Django Academyコースには全4レッスンが含まれています。

汎用ビューを自分の用途に合わせる

汎用ビューには適切なデフォルト設定がありますが、実際のアプリには調整が必要です。いくつかのフックをオーバーライドしてカスタマイズします。🔧

get_querysetの役割

get_querysetはビューが扱う行を決めます。そのため、オーバーライドすれば結果を絞り込んだり並べ替えたりできます。

get_querysetで絞り込む

絞り込んだquerysetを返すと、公開済みの投稿など、必要な行だけを表示できます。

class PostList(ListView):
    model = Post
    def get_queryset(self):
        return Post.objects.filter(published=True)

URLまたはユーザーを読み取る

get_queryset内ではself.requestを読み取れるため、ログイン中のユーザーに合わせて結果を絞り込めます。

def get_queryset(self):
    return Post.objects.filter(author=self.request.user)

template_nameをオーバーライドする

デフォルトのテンプレートパスでは都合が悪いですか?template_nameに任意のテンプレートを指定できます。

class PostList(ListView):
    model = Post
    template_name = "blog/home.html"

コンテキスト変数をオーバーライドする

template_nameとcontext_object_nameを組み合わせると、カスタムテンプレートで分かりやすい変数名を使えます。

class PostList(ListView):
    template_name = "blog/home.html"
    context_object_name = "posts"

コンテキストを追加する

get_context_dataをオーバーライドすると、オブジェクトと一緒にページタイトルなどの追加の値を渡せます。

def get_context_data(self, **kwargs):
    ctx = super().get_context_data(**kwargs)
    ctx["title"] = "Blog"
    return ctx

必ず最初にsuperを呼ぶ

get_context_dataでは、まずsuper()を呼びます。これにより、ビューがすでに追加したオブジェクトを保持したうえで、自分の値を追加できます。

サフィックスをカスタマイズする

model_listよりmodel_browseを使いたいですか?template_name_suffixを設定すると、Djangoが付加するサフィックスだけを変更できます。

class PostList(ListView):
    template_name_suffix = "_browse"

結果を並べ替える

get_querysetをオーバーライドして行を並べ替えます。たとえば、新しい投稿を先に表示できます。

def get_queryset(self):
    return Post.objects.order_by("-created")

小さなフックで大きく制御する

これらの少数のオーバーライドを使えば、汎用ビューの整った構造を保ちながら、ほぼあらゆる要件に合わせて調整できます。💡

簡単な確認

get_querysetをオーバーライドする目的は何ですか?

まとめ:ビューのカスタマイズ

get_queryset、template_name、get_context_dataを使って汎用ビューを調整し、シンプルさを保ちながらデータとテンプレートをカスタマイズしました。🎉

無料で開始

AI チューターと学ぶ Python — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
30
レッスン
120

よくある質問

「get_querysetとTemplatesのオーバーライド」レッスンは無料ですか?

はい。「get_querysetとTemplatesのオーバーライド」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Django Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Django Academyコースには全4レッスンが含まれています。

「get_querysetとTemplatesのオーバーライド」で何を学びますか?

ビューごとにデータとテンプレート名をカスタマイズします ブラウザで直接実行するハンズオンコードでDjango Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Django Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのDjango Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「get_querysetとTemplatesのオーバーライド」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このDjango Academyレッスンでコードを書いて実行できますか?

はい。すべてのDjango Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

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

  1. ListViewとDetailView
  2. CreateViewとUpdateView
  3. DeleteViewとsuccess_url
  4. get_querysetとTemplatesのオーバーライド
← Django Academyに戻る