django 开发服务器,将 headers 添加到静态文件
django dev server, adding headers to static files
使用 django 开发服务器 (1.7.4),我想向它提供的所有静态文件添加一些 headers。
看来我可以将自定义视图传递给 django.conf.urls.static.static
,如下所示:
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)
而 common.views.static.serve
看起来像这样:
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
但是,只需在 INSTALLED_APPS
中添加 django.contrib.staticfiles
即可自动添加静态网址,而且似乎没有办法覆盖它们。从 INSTALLED_APPS
中删除 django.contrib.staticfiles
使这项工作有效,但是,如果我这样做,静态文件模板标签将不再可用。
如何使用 django 开发服务器覆盖为静态文件提供的 headers?
staticfiles
app overrides the core runserver
命令但允许您禁用静态文件的自动服务:
python manage.py runserver --nostatic
我发现作者的代码对我不起作用,我会得到如下错误:
[10/Dec/2020 18:08:13] "GET /static/img/foo.svg HTTP/1.1" 404 10482
Not Found: /static/img/foo.svg
我正在使用 Django 3,如果有区别的话。
这是我所做的:
from django.contrib.staticfiles.views import serve
def custom_serve(request, path, insecure=False, **kwargs):
"""
Customize the response of serving static files.
Note:
This should only ever be used in development, and never in production.
"""
response = serve(request, path, insecure=True)
response['Access-Control-Allow-Origin'] = '*'
# if path.endswith('sw.js'):
# response['Service-Worker-Allowed'] = '/'
return response
urls部分与问题相同:
from django.conf import settings
if settings.DEBUG:
# Allow custom static file serving (use with manage.py --nostatic)
from django.conf.urls.static import static
from CHANGE.THIS.PATH.views import custom_serve
urlpatterns += static(
settings.STATIC_URL, document_root=settings.STATIC_ROOT, view=custom_serve
)
使用 django 开发服务器 (1.7.4),我想向它提供的所有静态文件添加一些 headers。
看来我可以将自定义视图传递给 django.conf.urls.static.static
,如下所示:
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)
而 common.views.static.serve
看起来像这样:
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
但是,只需在 INSTALLED_APPS
中添加 django.contrib.staticfiles
即可自动添加静态网址,而且似乎没有办法覆盖它们。从 INSTALLED_APPS
中删除 django.contrib.staticfiles
使这项工作有效,但是,如果我这样做,静态文件模板标签将不再可用。
如何使用 django 开发服务器覆盖为静态文件提供的 headers?
staticfiles
app overrides the core runserver
命令但允许您禁用静态文件的自动服务:
python manage.py runserver --nostatic
我发现作者的代码对我不起作用,我会得到如下错误:
[10/Dec/2020 18:08:13] "GET /static/img/foo.svg HTTP/1.1" 404 10482
Not Found: /static/img/foo.svg
我正在使用 Django 3,如果有区别的话。
这是我所做的:
from django.contrib.staticfiles.views import serve
def custom_serve(request, path, insecure=False, **kwargs):
"""
Customize the response of serving static files.
Note:
This should only ever be used in development, and never in production.
"""
response = serve(request, path, insecure=True)
response['Access-Control-Allow-Origin'] = '*'
# if path.endswith('sw.js'):
# response['Service-Worker-Allowed'] = '/'
return response
urls部分与问题相同:
from django.conf import settings
if settings.DEBUG:
# Allow custom static file serving (use with manage.py --nostatic)
from django.conf.urls.static import static
from CHANGE.THIS.PATH.views import custom_serve
urlpatterns += static(
settings.STATIC_URL, document_root=settings.STATIC_ROOT, view=custom_serve
)