汎用ビューを使用したデータの表示
Django の汎用ビュー システムにより、反復的なコードの作成が合理化されます。 データ ドリブン アプリケーションで実行する一般的な操作では、同じパターンを共有します。 たとえば、ID または主キーによって個々の項目を表示する場合、ワークフローは常に次のようになります。
- ID を使ってデータベースから項目を読み込みます。
- 項目が見つからない場合は、404 を返します。
- 項目が見つかった場合は、表示するテンプレートに項目を渡します。
汎用ビュー システムでは、この事実が確認され、既に記述されているコア コードを含む使用できるクラスが提供されます。 適切なクラスから継承し、いくつかのプロパティを設定してから、URLconf に適切なパスを登録します。 残りの処理は自動的に行われます。
Django には、データを表示するための 2 つの汎用ビュー DetailView
および ListView
が含まれています。
項目の詳細のための DetailView
汎用ビュー DetailView
は、項目の詳細ページを表示するために使用されます。 DetailView
では、主キーによって指定された model
の項目を取得し、それをテンプレートに渡します。 使用するテンプレートの名前を template_name
に設定できます。 既定値は、<model>_detail.html
です。 最後に、 テンプレートで使用する変数の名前を context_object_name
に設定できます。
犬の汎用ビューを使用して詳細ビューを作成するには、次のコードを使用します。
from . import models
from django.views import generic
class DogDetailView(generic.DetailView):
model = models.Dog
template_name = 'dog_detail.html'
context_object_name = 'dog'
DogDetailView
の登録は、他の path
エントリに似ています。 含めるための重要なのは、pk
という名前のパラメーターです。 Django では、この規則を使用して主キーが識別されます。 また、as_view()
メソッドを使用して、クラスをビューに変換することにも注意してください。
path('dog/<int:pk>', views.DogDetailView.as_view(), name='dog_detail')
項目の一覧のための ListView
汎用ビュー ListView
は、 DetailView
と同様の方法で動作します。 ビュー内の変数の名前に context_object_name
を設定し、テンプレートの名前に template_name
を設定できます。
主な違いは、 ListView
は複数の項目を返す任意の形式のクエリで動作するように設計されていることです。 そのため、get_queryset
関数をオーバーライドする必要があります。 関数 get_queryset
は、 汎用ビュー システムによって呼び出され、データベースから項目を取得します。これにより、必要に応じて項目の順序付けやフィルター処理を行うことができます。
汎用ビュー ListView
を使用してすべてのシェルターのリストを表示するビューを作成するには、次のコードを使用できます。
from . import models
from django.views import generic
class ShelterListView(generic.ListView):
template_name = 'shelter_list.html'
context_object_name = 'shelters'
def get_queryset(self):
return models.Shelter.objects.all()
ビューの登録は、DetailView
とほとんど同じ方法で実行されます。
path('', ShelterListView.as_view(), name='shelter_list')