KnowHow

技術的なメモを中心にまとめます。
検索にて調べることができます。

DjangoのViews.pyでデータを取得してHTMLで表示する(クラス)

登録日 :2024/01/31 09:53
カテゴリ :Python基礎

Djangoのviews.pyでクラスを使う場合、class-based views(クラスベースのビュー)を定義します。以下は、Profileモデルからプロフィールオブジェクトを取得して、それをテンプレートに渡すクラスベースのビューの例です。

python
Copy code

from django.shortcuts import render
from django.views import View
from .models import Profile

class ProfileView(View):
    template_name = 'profile_template.html'

    def get(self, request, *args, **kwargs):
        # ユーザー名に基づいてプロフィールオブジェクトを取得
        username = kwargs.get('username')
        profile = Profile.objects.get(user__username=username)

        # テンプレートにデータを渡す
        context = {'profile': profile}

        # テンプレートをレンダリングしてレスポンスを返す
        return render(request, self.template_name, context)

そして、urls.pyでこのクラスベースのビューを指定します。

python
Copy code

from django.urls import path
from .views import ProfileView

urlpatterns = [
    path('profile/<str:username>/', ProfileView.as_view(), name='profile-view'),
    # 他のパスやビューを追加
]

この例では、ProfileViewクラスをas_view()メソッドで呼び出してクラスベースのビューを取得し、urls.pyで該当のパスにマッピングしています。クラスベースのビューではgetメソッド内でGETリクエストを処理し、テンプレートにデータを渡しています。

テンプレートは先程の例と同様にデータを表示する形になります。ビューのクラスベース化は柔軟性があり、HTTPメソッドに対する処理をクラス内のメソッドで定義することができます。