UTALI

みんなの役に立つ情報をどんどん公開していきます

【Python】Djangoで静的ファイルを配信するための設定について

f:id:mochizuki_p:20170627184425p:plain

WebアプリではCSSやJS、画像などの静的ファイルの配信を行うことが多いです。

今回はPython3でのDjangoでこれを可能にするための設定をまとめました。

参考になれば幸いです。

必要なライブラリ

Djangoで静的ファイルの配信を実行するにはWhitenoiseと呼ばれるライブラリを利用するのが一般的です。

導入は以下のコマンドで可能です。

pip3 install whitenoise

手順

settings.pyと同一のディレクトリに、静的ファイルを配置するための “static” ディレクトリを作成します

mkdir static

そしてsettings.pyの一番下の箇所に以下を追記します。

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.9/howto/static-files/
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'staticfiles')
STATIC_URL = '/static/'

# Extra places for collectstatic to find static files.
STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, 'static'),
)

これでstaticに配置されたファイルを配信するように指定しました。

次にwsgi.pyを次のように編集します。

from whitenoise.django import DjangoWhiteNoise
from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{あなたのアプリケーションの名前}.settings")

application = get_wsgi_application()
application = DjangoWhiteNoise(application)

これでDjangoがwhitenoiseを使えるようになりました。

これでアプリを起動すれば静的ファイルが配信できるようになったはずです。

もしHerokuで利用する場合は以下のように、whitenoiseをrequirements.txtに追記するようにしておいてください

pip3 freeze > requirements.txt