Using the django dev server (1.7.4), I want to add some headers to all the static files it serves.
It looks like I can pass a custom view to django.conf.urls.static.static, like so:
if settings.DEBUG:
from django.conf.urls.static import static
from common.views.static import serve
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL,
document_root=settings.STATIC_ROOT, view=serve)
And common.views.static.serve looks like this:
from django.views.static import serve as static_serve
def serve(request, path, document_root=None, show_indexes=False):
"""
An override to `django.views.static.serve` that will allow us to add our
own headers for development.
Like `django.views.static.serve`, this should only ever be used in
development, and never in production.
"""
response = static_serve(request, path, document_root=document_root,
show_indexes=show_indexes)
response['Access-Control-Allow-Origin'] = '*'
return response
However, simply having django.contrib.staticfiles in INSTALLED_APPS adds the static urls automatically, and there doesn't seem to be a way to override them. Removing django.contrib.staticfiles from INSTALLED_APPS makes this work, however, if I do that, the staticfiles templatetags are no longer available.
How can I override the headers that are served for static files using the django development server?
staticfiles app overrides the core runserver command but allows you to disable the automatic serving of the static files:
python manage.py runserver --nostatic
来源:https://stackoverflow.com/questions/28724951/django-dev-server-adding-headers-to-static-files