Django テンプレート(templates)を利用する

2019年10月24日

Djangoのテンプレートを利用してみます。

 

あらかじめhello_projcectというプロジェクトを作成し、myapp1およびmyapp2という2つのアプリケーションを作成しておきます。

 

hello_project/urls.py は下記のように記述しておきます。

 

関連ページ

Django入門 画面を作成する

 

 

テンプレートは主にプロジェクト単位とアプリケーション単位において分けることができます。本記事では、アプリケーションと同じ構成であるプロジェクト単位でのテンプレートが存在した場合、プロジェクトの方が優先されることを確認します。

 

 

アプリケーション単位でのテンプレート


 

はじめにアプリケーション単位でのテンプレートを作成していきます。

 

settings.pyのINSTALLED_APPSの項目に、myapp1およびmyapp2を追記します。

 

hello_project/settings.py

 

 

まずmyapp1ディレクトリ内にtemplatesディレクトリを作成し、更にmyapp1ディレクトリを作成します。そして、その中にindex.htmlを作成します。

 

同様に、myapp2ディレクトリ内にtemplatesディレクトリを作成し、更にmyapp2ディレクトリを作成、その中にindex.htmlを作成します。

 

下記のようなディレクトリ構造になっていることを確認して下さい。説明していないファイル等の表示は省いています。

各アプリケーション(myapp1/myapp2)のtemplatesの下に、更にアプリケーションと同名のディレクトリを作成することによって、名前空間としての機能をもたせています(後述)。

 

作成したindex.htmlは下記のように記述します。

 

 

次にmyapp1およびmyapp2ディレクトリ内にそれぞれurls.pyを作成し、下記のように編集します。

 

myapp1/urls.py および myapp2/urls.py

 

 

最後に各アプリケーションディレクトリ内のviews.pyをそれぞれ下記のように編集します。

 

myapp1/views.py

 

myapp2/views.py

「myapp1/index.html」「myapp2/index.html」のようにディレクトリ名から記述することによって名前空間としての機能を持つようになり、各アプリケーションで用意したテンプレートを区別しています。

 

以上で下記URLにて二つのアプリケーション画面が表示されます。

 

http://127.0.0.1:8000/myapp1/ での画面

 

 

プロジェクト単位でのテンプレート


 

次にプロジェクト単位でのテンプレートを作成します。

 

はじめの方で説明したように、アプリケーションと同じ構成であるプロジェクト単位でのテンプレートが存在した場合、プロジェクトの方が優先されることを確認します。

 

まずmanage.pyと同階層に、templatesディレクトリを作成して下さい。そして更にmyapp1ディレクトリ、その中にindex.htmlを作成していきます。

myapp1アプリケーションのtemplates以下と同じ構成にしています。

 

index.htmlは下記のように編集します。

 

 

次にsettings.pyのTEMPLATES>DIRSを下記のように記述します。

 

hello_project/settings.py

 

 

以上で、http://127.0.0.1:8000/myapp1/にアクセスすると、アプリケーション側のテンプレートではなく、プロジェクト側のテンプレート、すなわちhello_project/templates/myapp1/index.html のテンプレートが利用されていることが確認できます。下記画像が表示された様子です。

 

 

 

通常は、管理のしやすいアプリケーション単位でのテンプレートを利用することが多いようです。

 

 

参照ページ


 

django ドキュメント

Overriding templates

 

 

 

LINEで送る
Pocket

Copyright © 2019 思考の葉 All Rights Reserved.  プライバシーポリシー