djangoでまずやるべきことは自分で作成したHTMLファイルを表示させることです
djangoでは,TemplateViewを用いることで速攻かつ圧倒的に少ないコードでHTMLファイルの表示を実装できます
本記事では,TemplateViewの基本的な使い方とよくあるエラーに対する処理方法について解説します
TemplateViewとは何か
djangoで用意されているClass-based Viewの1つです
PythonでのClass形式で記述するタイプで,TemplateViewを継承して自分なりのViewに改造していきます
このTemplateViewは,自身で作成したHTMLを表示する際に,少ないコードで簡単に実装することができます
TemplateViewでHTMLを表示する
以下にあるHello,worldと表示するだけの関数ベースのビューを書き換えます
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world.")
djangoプロジェクトへのHTMLの配置
自身で作成したHTMLをdjangoプロジェクトのフォルダーに配置します
本ブログはアプリ名がblogなので以下のようになります
templates,blog,home.htmlを新規作成してください
django_project
django_project
blog
templates #追加
blog #追加
home.html #追加
Views.pyにTemplateViewを追加する
TemplateViewでHTMLを表示するだけのクラスを作成します
TemplateViewをimportしてサブクラス化します
from django.views.generic import TemplateView
class HomeTemplateView(TemplateView):
template_name = 'blog/home.html' # 自身で作成したHTMLの名前
TemplateViewのURL指定をする
urls.pyにTemplateViewで表示したいURLを指定します
from django.urls import path
from .views import HomeTemplateView
urlpatterns = [
path('', HomeTemplateView.as_view(), name='home'), # 最後のカンマを忘れないように
]
うまく表示されているか確認する
http://127.0.0.1:8000/にアクセスして表示されているか確認しましょう
Hello,worldとなっていたら完了です
TemplateDoesNotExistとエラーが出たら
テンプレートが存在しないエラーが出ることがあります
そのケーススタディをいくつか紹介します
INSTALLED_APPSに追加していない
settings.pyのINSTALLED_APPSに自身のアプリを追加していない場合があります
INSTALLED_APPS = [
'blog.apps.BlogConfig', #追加
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
フォルダ名や構成が間違えている
アプリフォルダに作成するフォルダは2つで構成が以下のようになります
templates/blog/home.html
“template“としている場合やblogフォルダが作成されていない場合がよくあります
views.pyでの表記が間違えている
私がよくやるミスがviews.pyのtemplate_name指定のミスです
blog/を書いているか,HTMLの名称を間違えていないか確認してください
class HomeTemplateView(TemplateView):
template_name = 'blog/home.html' # blog/を書いていない
参考文献
下記にTemplateViewの公式ドキュメントや関連記事をまとめているので,参考にしてください
Base viewsの公式ドキュメント
TemplateViewで簡単にデータベースを扱う
Templateを継承してHTMLのコードを減らす
Templateの継承を使用しながら,ページごとにactiveを実装する
お疲れ様でした
コメント