【Python】Djangoのテンプレートと静的コンテンツを一元管理する

2019年1月27日

システムを作成する際に、テンプレートや静的コンテンツが色々なフォルダに散らばっているのはちょっと使いづらいですよね。

特に画像とかは色々なところで使いますし、一つのファイルで管理したいと思いますよね。

Djangoの標準ではテンプレートや静的コンテンツはアプリケーション(DjangoのアプリケーションはDDDでのドメインに対応するくらいの範囲)ごとにディレクトリを作成し、管理するようになっています。

これの設定を変えて、プロジェクト直下で一元管理できるようにしたいと思います。

 

テンプレートファイルを一元管理する

まずはテンプレートファイルの設定をしましょう。

Djangoチュートリアルを元に設定します。

さて、テンプレートの設定は「settings.py」で行います。このファイル内の「settings.py」>「TEMPLATE」>「DIRS」がありますので、以下のように編集します。


TEMPLATES = [
{
	"BACKEND": "django.template.backends.django.DjangoTemplates",
	"DIRS": [os.path.join(BASE_DIR, "templates")],

# 以下省略

これで設定完了です。プロジェクト直下(manage.pyと同じ階層)でテンプレートが管理できるようになりました。

プロジェクト直下に、「mysite/templates/polls」という階層でディレクトリを作成して、その中にテンプレートを配置すればOKです。

ビューの書き方はチュートリアルそのままで問題ありません。

 

静的コンテンツ(static)を一元管理する

次は静的コンテンツをプロジェクト直下で管理できるように設定しましょう。

静的コンテンツは「mysite/static/polls」で管理します。

テンプレートと同様で「settings.py」を修正します。


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.1/howto/static-files/

STATIC_URL = "/static/"

# 以下の行を追加
STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"),)

一行追加するとこれで終了です。

 

まとめ

テンプレートや静的コンテンツを一元管理するよう設定してみました。

おそらくDjangoの作りとしてはこうするのが良いのか思います。(本の受け売り)

ちなみに、実際の動作は以下のチュートリアルの記事で行っています。

【Python】djangoのチュートリアルをやってみる<その2>

【Python】djangoのチュートリアルをやってみる<その3>