LoginSignup
4
2

More than 3 years have passed since last update.

Django staticファイルをデプロイ環境で利用する方法

Last updated at Posted at 2020-05-05

問題

Djangoアプリを作成した際、runserver環境では問題ないのに、デプロイ環境ではstaticのcssが読み込まれず、殺風景なHTMLが表示される。原因と対処法は他記事にて詳しく解説してくれているので、ここでは自分用のメモを残すことを目的とする。

例)殺風景なadmin画面:
ss21.png

例)正常なadmin画面:
ss22.png

環境

  • Windows Server 2016
  • Apache 2.4
  • Django 3.0

原因

Djangoではrunserver環境とapacheなどの本番環境で、staticの保管場所が原則異なる。これについては下記が詳しい。
- Djangoのstaticファイルが404から復活した話
- djangoは誰が動かしているのか?(デプロイのための俯瞰)

対処法

設定変更。最終的には下記のようにすることになる。

STATIC_URL

Djangoからstaticファイルにアクセスするurlを決める。/static/とすると、Djangoのappnameというアプリのtemplate上でstaticファイル{% static 'css/base.css' %}は、HTML上ではhttp://localhost/static/appname/css/base.cssとレンダリングされる。

settings.py
STATIC_URL = '/static/'

STATIC_ROOT

次のcollectstaticを実行するにあたって、staticファイルを集める場所を指定する。

settings.py
STATIC_ROOT = 'D:/static/shib_test/static/'

collectstatic

runserver環境では、配布性の観点からそれぞれのappがstaticフォルダを持っており、Djangoはそこにアクセスしている。一方、デプロイ環境ではセキュリティの観点から公開用staticファイルは一箇所で提供するのが普通。collectstaticは、それぞれのappが持っているstaticファイルをSTATIC_ROOTで指定したディレクトリに集めてくる。

console
> python manage.py collectstatic

Alias /static/

httpd.conf
Alias /static/ D:/static/shib_test/static/ # ←追加

Apacheに対して、例えばhttp://localhost/static/appname/css/base.cssへのGETリクエストがあった場合に、ディスク上のどのリソースを読みに行けばいいか指定する。

以上。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2