diadia

興味があることをやってみる。自分のメモを残しておきます。

Django Static file の設定方法(settings.py)

settings.py で設定する項目
STATIC_URL = '/static/'
MEDIA_URL = '/media/"
STATICFILES_DIR =[ os.path.join(BASE_DIR, "static_xxx")]
STATIC_ROOT =os.path.join(os.path.dirname(BASE_DIR), "static_yyy",static_root)
MEDIA_ROOT =os.path.join(os.path.dirname(BASE_DIR), "static_yyy",media_root)

の設定が必要。

設定が終わったら、ドキュメントに従ってurls.pyの設定も行う。
Managing static files (e.g. images, JavaScript, CSS) | Django documentation | Django

if urlpatterns.DEBUG:
urlpatterns = [
       path("",XXXXX),
       path("",XXXXX),
       path("",XXXXX),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

ここまで出来たらpython manage.py collectstaticを用いること。
adminにアクセスするとデフォルトでstatic ,cssとgetの中に表示される。
これが自分で作ったページでも反映されれば設定は成功していると思って良い。

で、これらがどんな役割を果たすのか分からない。いろいろ情報を漁った結果、開発環境とプロダクト環境ではstaticファイルの扱い方が変わるらしい。
開発環境ではdjangoが直接staticファイルを扱うのに対し、本番環境ではnginxやapache等のwebサーバーがstaticファイルを扱うようなことが書いてあった。
そこでとりあえず仮定を立てる。
STATICFILES_DIRさえあれば開発環境は動くのか?また本番環境のフォルダを消したりして動くかやってみる。またpython manage.py collectstaticとは、どのような動きをするかも観察する。


ローカル環境の場合には最低限必要な要素は、STATICFILES_DIRとSTATIC_URLの設定のみで動いた。またurls.pyのurlpatterns= [path()...] +static...のstatic部分も設定しなかったけど動いてしまった。htmlを確認すると、staticが使われていた。static_urlはこの働きをするっぽい。
本番環境でstatic_rootが必要らしい。
静的ファイルのデプロイ | Django ドキュメント | Django


mediaについて
これもまだわかっていない事項ではあるが、staticとmediaの違いがわかったかもしれない。staticはcss,javascriptに加え、画像も配信することができる。mediaはあるモデルのオブジェクトに。