クラスベースビュー

djangoでビューを実装する方法には
関数ベースビュー(function base views)とクラスベースビュー(class based views)の2種類がある。

 

どちらかというとクラスベースビューのほうが使用を推奨されている。
クラスベースビューを使用したページを追加する手順は以下の通り。


① urls.pyにブラウザから指定されたアドレスと呼び出されるクラスの関連を追記する
② 新規でviews.pyファイルを作成し、①から呼び出すクラスと参照するテンプレートを記載する
③ ②で参照するテンプレートの格納先をsettings.pyに記載する
④ ③のフォルダに新規でhtmlを作成し配置する


urls.py

from django.contrib import admin
from django.urls import path

#hogeviewsファイルのhogehoge_classを参照する
from .hogeviews import hogehoge_class

 

urlpatterns = [
    path('admin/', admin.site.urls),

    #hogehogeとアドレスに入力するとhogehoge_clasを呼び出す
    path('hogecb/', hogehoge_class.as_view()),

]

 


hogeviews.py

from django.http import HttpResponse

#ライブラリのTemplateViewを参照する
from django.views.generic import TemplateView

 

#hogehoge_classを定義し下記htmlを参照する
class hogehoge_class(TemplateView):
    template_name = 'hoge_temp.html'

 

settings.pyのTEMPLATESのDIRSにテンプレートを格納するフォルダを記載する

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,'tempdir')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

os.path.joinはパスを結合する関数で使用するにはimport osをしておく必要がある

 

hoge_temp.html

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>タイトルほげ</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <!-- ヘッダー -->
    <header>
        へっだー
    </header>

    ほげ?
</body>
</html>

 

 

今回の各ファイルのフォルダ階層は以下の通り

hogeprj
  |---hogeprj
    |-urls.py
    |-hogeviews.py
    |-settings.py
  |
  |---tempdir
    |- hoge_temp.html