■ はじめに
https://dk521123.hatenablog.com/entry/2022/08/07/121017
の続き。 今回は、前回のサンプルをベースにビューの表示の仕方について学ぶ。
目次
【1】ビューの種類 1)関数ベースビュー(Function Based Views) 2)クラスベースビュー(Class-based View) 【2】Class-based View の種類 【3】サンプル 0)前提条件 例1:Generic Base - TemplateView 例2:データを渡す - get_context_data 【3】トラブル 1)エラー「TemplateDoesNotExist」が表示
【1】ビューの種類
Django のビューの種類は、以下の通り。 ~~~~ 1)関数ベースビュー(Function Based Views) 2)クラスベースビュー(Class-based View) ~~~~ 使い分けは、以下のサイトを参照。
https://zenn.dev/ikemo/articles/django-class-based-view-or-function-based-view
1)関数ベースビュー(Function Based Views)
* 関数によりビューを表示する => 以下の関連記事のサンプルを参照
https://dk521123.hatenablog.com/entry/2022/08/07/121017
2)クラスベースビュー(Class-based View)
* クラスによりビューを表示する => 今回のテーマ * 「汎用クラスビュー」「汎用ビュー」とも呼ばれる
【2】Class-based View の種類
* Class-based View には、多数のビューが用意されている => 詳細は、以下の公式サイトを参照。
https://docs.djangoproject.com/en/4.1/ref/class-based-views/
* 主なビュークラスは、以下の通り。 ~~~~ 1)Generic Base : 基本的な汎用ビュークラス 2)Generic List : 一覧表示用ビュー 3)Generic Detail : 詳細表示用ビュー 4)Generic Edit : 更新表示用ビュー ~~~~
【3】サンプル
0)前提条件
https://dk521123.hatenablog.com/entry/2022/08/07/121017
で、プロジェクト作成ができていること
フォルダ構成
helloworld + templates <= ADD + index.html <= ADD + helloworld + urls.py <= FIX + settings.py <= FIX + views.py <= ADD
例1:Generic Base - TemplateView
helloworld/urls.py
from django.contrib import admin from django.urls import path from helloworld.views import HelloWorldView # ADD urlpatterns = [ path('admin/', admin.site.urls), # FIX path('helloworld/', HelloWorldView.as_view()), # ADD ]
helloworld/settings.py
# 一部のみ TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], # FIX 'APP_DIRS': True,
helloworld/views.py
from django.views.generic import TemplateView class HelloWorldView(TemplateView): template_name = "index.html"
templates/index.html
<div>Hello World...</div>
動作確認
~~~~ python ./helloworld/manage.py runserver ~~~~ などで、サーバを起動した状態で ブラウザで以下のURLにアクセスする => 「Hello World...」が表示されるはず
http://127.0.0.1:8000/helloworld/
例2:データを渡す - get_context_data
helloworld/views.py
from django.views.generic import TemplateView class HelloWorldView(TemplateView): template_name = "index.html" # ★ここに注目★ def get_context_data(self): context = super().get_context_data() context["value1"] = "Hello" context["value2"] = "World" context["value3"] = "!!!???" return context
templates/index.html
This is a sample... <div>{{ value1 }}</div> <div>{{ value2 }}</div> <div>{{ value3 }}</div>
動作確認
サーバを起動した状態で ブラウザで以下のURLにアクセスする => 以下が表示されるはず ~~~~~ This is a sample... Hello World !!!??? ~~~~~
http://127.0.0.1:8000/helloworld/
【4】トラブル
1)エラー「TemplateDoesNotExist」が表示
ブラウザでアクセスしたら、 エラー「TemplateDoesNotExist」が表示された
原因
* テンプレートを設置している場所が誤っていた => 以下のサイトに書いてある 『django.template.loaders.filesystem.Loader:がどこのディレクトリが 参照されているか書いてある』によって原因究明が掴めた
https://www.tekizai.net/entry/django_templatedosenotexist
解決案
helloworld/helloworld/templates/index.html を helloworld/templates/index.html を移動した
関連記事
Django ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2022/08/07/121017
Django ~ 基本編 / アプリ ~
https://dk521123.hatenablog.com/entry/2022/08/09/092941
Django ~ 基本編 / model ~
https://dk521123.hatenablog.com/entry/2022/08/17/231732