Help us understand the problem. What is going on with this article?

Djangoにおける静的ファイル(static file)の取り扱い

DjangoのチュートリアルやUdemyの授業を進める中で、理解できなかったsettings.pyの下の方に追記する、STATICFILES_DIRSSTATIC_ROOTSTATIC_URLについてわかりやすい記事があったので、備忘のために。(翻訳許可済み)
Django Static Files

同じことに悩まれている方の参考になれば嬉しいです。

STATICFILES_DIRS

個別のアプリケーションではなく、トップページに表示する画像などを保管する任意の場所を、Djangoに探すように指定するのがSTATICFILES_DIRS。(ここでは仮にプロジェクト直下に"assets"というフォルダを作成。)

settings.py
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "assets")
]

Application/static/

"Application/"という名前のアプリケーションを作成したとする。このアプリケーションに関するstatic_file(cssやjs, 画像など)は、"Application/static/"に保管する。これはアプリケーションごとに作成するので、アプリケーションの数だけ増える。

これで、下のように静的ファイルの置き場所ができた。(Application1,2,3を作成したとする。)
ローカルでの開発環境では、このように静的ファイルが別々のフォルダに格納されていても問題はない。

Screen Shot 2019-02-05 at 0.03.27.png

collectstatic コマンド

web server(NGINX等)やHerokuにデプロイする際には、静的ファイルの置き場所を複数ではなく、一つの場所に集めてあげる必要がある。それがcollectstaticコマンド。しかし、collectstaticする前に、集める場所をsettings.pyに設定する必要がある。(プロジェクト直下、"static"というフォルダを指定。)

settings.py
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

この後、

$ python manage.py collectstatic

これで下のように静的ファイルが、プロジェクト直下の"static"に集約される。
Screen Shot 2019-02-05 at 0.30.59.png

STATIC_URL

web serverに静的ファイルを見に行く場所を指定する。
・NGNIXの例

location /static/ {
    root    /my/project/static/;
}

そして最後に、デプロイ環境で、{% static 'main.css' %}などのDjangoテンプレートが読みに行く場所をsettings.pyにSTATIC_URLで指定してあげる。

settings.py
STATIC_URL = '/static/'

まとめ

最終的には下のイメージになる。
開発環境では、プロジェクト直下や各アプリケーションごとに静的ファイルの置き場を作成してそれぞれを呼び出す。
デプロイする際は、個別の静的ファイルをSTATIC_ROOTで指定した場所にcollectstaticで全て集める。
その後、web serverにSTATIC_ROOT(static/)を見に行くようにSTATIC_URLで指定する。
Screen Shot 2019-02-05 at 0.54.47.png

間違っている箇所等あれば、コメントいただけると助かります。
以上です。

saira
独学でpythonと機械学習勉強中。
https://www.sairablog.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした