DjangoでstaticファイルのURLをアプリごとに設定したい。


Djangoでは静的ファイルの配信は、settings.pyにあるSTATIC_URLで配信するURLは設定されますが、アプリケーションごとに配信するURLを設定したい事例がありました。

https://example.com/app1/static/
https://example.com/app2/static/

のようなイメージです。

本番環境等では、静的ファイルの配信は、nginxなどのwebサーバーに任せるべきことなので、正攻法としては、webサーバーのリバースプロキシやmod_rewriteなどでURLを変更させるのが良いかと思います。

djangoのrunserverでサクッと検証するには、urls.pyに以下のようにすれば、できました。

app1/urls.py
from django.views.static import serve
from os.path import join
from testProj.settings import BASE_DIR

urlpatterns = [
  re_path(r'^static/(?P<path>.*)', serve, {'document_root':join(BASE_DIR, 'app1', 'static'}),
  ...
]

プロジェクトのurls.pyに記述する場合は、以下のように。

testProj/urls.py
from django.views.static import serve
from os.path import join
from testProj.settings import BASE_DIR

urlpatterns = [
  re_path(r'^app1/static/(?P<path>.*)', serve, {'document_root':join(BASE_DIR, 'app1', 'static'}),
  ...
]