[前回] Django+Reactで学ぶプログラミング基礎(16): Djangoチュートリアル(投票アプリその7-2)
はじめに
Django公式チュートリアル、その7-3です。
前回は、管理サイトにソート/検索/フィルター
機能を追加しました。
今回は、Djangoテンプレートを使用し、見映えと使い勝手を改善します。
Djangoアプリ作成(その7-3): 投票(poll)アプリ
今回の内容
- テンプレートを使用し、管理サイトのルック&フィールをカスタマイズ
- ※ ルック&フィールとは
- ソフトウェアのUI(ユーザーインターフェイス)における、見映えと使いやすさを指す
- プロジェクトテンプレートをカスタマイズ
- アプリケーションテンプレートをカスタマイズ
- ※ ルック&フィールとは
プロジェクトテンプレートをカスタマイズ
テンプレートの格納場所
- プロジェクトのテンプレート
- 慣習として、プロジェクトディレクトリ(
manage.py
の配置ディレクトリ)直下のtemplates
ディレクトリに配置 - プロジェクト設定ファイルの
TEMPLATES
オプションに、DIRS
オプションを追加-
DIRS
は、検索パスで、ファイルシステム上のディレクトリのリスト- Djangoがテンプレートを読み込む際、チェックされる
-
- 慣習として、プロジェクトディレクトリ(
pollsite/settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates'],
'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',
],
},
},
]
Django自体のソースコードからテンプレートをコピー
(venv) C:\kanban\pollsite>python -c "import django; print(django.__path__[0])"
C:\kanban\venv\.venv\lib\site-packages\django
-
Django自体のソースコードから、デフォルトの管理サイトテンプレートディレクトリを探す
-
コピーされたテンプレートファイルを編集
-
{{ site_header|default:_('Django administration') }}
を- 自分のサイト名(例えば
投票管理サイト
)に入れ替える
- 自分のサイト名(例えば
-
base_site.html
{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">投票管理サイト</a></h1>
{% endblock %}
- VS Codeコマンドプロンプトからサーバーを起動
(venv) C:\kanban\pollsite>python manage.py runserver
アプリケーションテンプレートをカスタマイズ
- アプリ特有のテンプレートは、各アプリのテンプレートディレクトリに配置される
- 例:
polls/templates
- 例:
- プロジェクト設定ファイル
settings.json
で、TEMPLATES
のAPP_DIRS
属性がTrue
と設定されている場合- Djangoは自動的に各アプリのディレクトリからフォールバックとして
templates/
を探す- ※ 上記操作で、テンプレートのコピー元の
django.contrib.admin
も、実は一つのアプリに相当
- ※ 上記操作で、テンプレートのコピー元の
- Djangoは自動的に各アプリのディレクトリからフォールバックとして
アプリケーションテンプレート VS. プロジェクトテンプレート
- アプリケーションテンプレートを使用するのが賢明
- メリット1: 投票アプリを他のプロジェクトにも追加できる
- メリット2: 投票アプリ自身にフィットした、カスタムテンプレートを使用できる
実際のプロジェクトで、テンプレートによるカスタマイズ
- Djangoのデフォルトの管理テンプレートはすべてオーバーライドできる
- 上記チュートリアルで紹介したアプローチは、テンプレートをオーバーライドする方法を示すため
- 実際のプロジェクトでは、
django.contrib.admin.AdminSite.site_header
属性を使用しカスタマイズ
テンプレート言語
- テンプレートで使用される
{%
と{{
タグ- Djangoのテンプレート言語の一部
- Djangoが
admin/base_site.html
をレンダリングする時、テンプレート言語が評価され- 最終的なHTMLページが生成される
以上、テンプレートを使用し、管理サイトをカスタマイズしました。
おわりに
これで、Django公式チュートリアルを一通り実践できました。
アプリ構築のノウハウのみならず、アプリ設計における考え方にも感銘を受けました。
次回は、Djangoの高度なチュートリアルです。お楽しみに。