django dev服务器,将标头添加到静态文件

时间:2015-02-25 16:56:38

标签: python django django-staticfiles

使用django dev服务器(1.7.4),我想为它所服务的所有静态文件添加一些标题。

看起来我可以将自定义视图传递给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

但是,只需在django.contrib.staticfilesINSTALLED_APPS自动添加静态网址,并且似乎没有办法覆盖它们。从django.contrib.staticfiles删除INSTALLED_APPS会使这项工作成功,但是,如果我这样做,则静态文件模板标签将不再可用。

如何使用django开发服务器覆盖为静态文件提供的标头?

2 个答案:

答案 0 :(得分:5)

staticfiles app overrides the core runserver命令,但允许您禁用静态文件的自动提供:

python manage.py runserver --nostatic

答案 1 :(得分:0)

我发现作者的代码对我不起作用,我会收到类似以下错误:

[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
    )