プロジェクトのtemplatesをアプリケーションのtemplatesに変更する
前回の記事では、settings.pyの設定変更と、ルートディレクトリ(Blog)にtemplatesディレクトリを作成してそのパスを通すまでの作業を行った。
この記事では、ルートディレクトリ(Blog)に作成したtemplatesディレクトリを、アプリケーションディレクトリ(Blog_app)に移動し、Djangoにアプリケーションディレクトリ(Blog_app)のtemplatesディレクトリを認識させる手順をまとめる。
現在のディレクトリ構成は以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
デスクトップ └Blog ├Blog_app │ ├migrations │ ├__init__.py │ ├adming.py │ ├apps.py │ ├models.py │ ├tests.py │ └views.py ├db.sqlite3 ├config │ ├・・・ │ └urls.py ├env_blog ├templates └manage.py |
前:【Django】settings.pyでの初期設定(INSTALLED_APPS、TEMPLATES、タイムゾーン、言語)
アプリケーション内にurls.pyとtemplatesディレクトリを作りパスを通す
config内のsetting.pyを編集
~デスクトップ/Blog/config/settings.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', #'DIRS': [BASE_DIR / 'templates'], 'DIRS': [BASE_DIR / 'Blog_app' / 'templates'], #'Blog_app'を追記 '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', ], }, }, ] |
前回の記事で以下のコードを記述していたが、
‘DIRS’: [BASE_DIR / ‘templates’],
‘DIRS’: [BASE_DIR / ‘Blog_app’ / ‘templates’],
これにより、Djangoはルートディレクトリ(BASE_DIR)内のアプリケーションディレクトリ(Blog_app)にあるtemplatesディレクトリをミニくことができる。
config内のurls.pyに追記
~デスクトップ/Blog/config/urls.py
1 2 3 4 5 6 7 8 |
from django.contrib import admin from django.urls import path, include #includeを追記 urlpatterns = [ path('admin/', admin.site.urls), path('Blog_app/', include('Blog_app.urls')), #追記 ] |
まず2行目のコードでincludeをインポートしておく。includeは別のファイルからURL構成を取り込むために使う関数。
from django.urls import path, include
今回はアプリケーションディレクトリ(Blog_app)内のurls.pyで規定するURL構成を取り込み、Blog_app内のurls.pyにリクエストをつなぐために使用する。
これで開発用サーバーを起動して”http://127.0.0.1:8000/Blog_app”ではじまるURLでアクセスしてきた場合は、全てBlog_app内のurls.pyがURLに応じてリクエストを振り分けることができるようになる。
※今の段階ではまだアプリケーションディレクトリ(Blog_app)にはurls.pyがないので、次の手順で作成する。
1つのプロジェクト内で複数のアプリケーションを作成する場合もあり、include関数はアプリケーションごとにURLパターンを作成する際に役立つ。
続いて、以下のコードでconfigディレクトリのurls.pyからアプリケーションディレクトリ(Blog_app)のurls.pyにパスを通している。
path(‘Blog_app/’, include(‘Blog_app.urls’))
path関数の第一引数ではURLパターンを記述している。
開発用サーバーを起動して”http://127.0.0.1:8000/Blog_app/”にアクセスすると、第二引数で指定したアプリケーションのurls.pyにリクエストをつなぐことができる。
Blog_app以外にもアプリケーションがある場合は、そのアプリケーション内のurls.pyを指定することでそちらにリクエストをつなぐこともできる。
第二引数ではinclude関数を使ってアプリケーションディレクトリ(Blog_app)内のurls.pyを指定している。
“http://127.0.0.1:8000/Blog_app/”という形ではじまるURLでアクセスがあった場合に、アプリケーションディレクトリ(Blog_app)のurls.pyで規定するURL構成をインクルードしている。
アプリケーションディレクトリ内にurls.pyを作成
アプリケーションディレクトリ(Blog_app)にurls.pyを作成する。
ディレクトリ構成は以下の通りになる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
デスクトップ └Blog #変数BASE_DIRが持つパスはここを指す ├Blog_app │ ├migrations │ ├__init__.py │ ├adming.py │ ├apps.py │ ├models.py │ ├tests.py │ ├views.py │ └urls.py #新規作成 ├db.sqlite3 ├config │ ├・・・ │ └urls.py #この記事で編集 ├env_blog ├templates └manage.py |
アプリケーションディレクトリ(Blog_app)に新規作成したurls.pyの中身はまだ空でも良い。
アプリケーションディレクトリ内にtemplatesディレクトリを作成
Blog_app(アプリケーションディレクトリ)内にtemplatesディレクトリを作成する。
ここのtemplatesは他の名前でも良いが、その場合はconfigディレクトリ内のsettings.pyにあるTEMPLATESで、”DIRS’: [BASE_DIR / ‘templates‘]”で規定する”templates”も他の名前に合わせておく必要がある。
さらにtemplatesディレクトリに”Blog_templates”を作成する。
今後、htmlファイルなどはこのBlog_templates内に作成していく。
現在のディレクトリ構成は以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
デスクトップ └Blog ├Blog_app │ ├migrations │ ├__init__.py │ ├adming.py │ ├apps.py │ ├models.py │ ├tests.py │ ├views.py │ ├urls.py │ ├templates #新規作成 │ └Blog_templates #新規作成 ├db.sqlite3 ├config │ ├・・・ │ └urls.py ├env_blog └manage.py |
ルートディレクトリ(Blog)内にあったtemplatesは使用しなくなるためディレクトリ構成からは除外した。(削除でも良い。)
ここでアプリケーションディレクトリ(Blog_app)のtemplatesをDjangoが見に行くためには、前回の記事でconfigディレクトリ内のsettings.pyで、TEMPLATESで[BASE_DIR / “templates”]を記述した上で、
この記事の「configディレクトリ内のurls.pyに追記」の項目の手順を行う必要がある。
ここまでの作業を行うことで、ルートディレクトリ内のtemplatesディレクトリではなく、アプリケーションディレクトリ(Blog_app)内のtemplatesをDjangoが見に行くことができるようになった。
Django記事一覧
次:【Django】models.pyでモデル(DBのテーブル)を作成する
コメント