Turn off caching of static files in Django development server

后端 未结 9 2223
灰色年华
灰色年华 2020-11-30 04:52

Is there an easy way to turn off caching of static files in Django\'s development server?

I\'m starting the server with the standard command:

<
9条回答
  •  清歌不尽
    2020-11-30 05:15

    In newer versions of Django a very simple solution is modify the project urls like so:

    from django.conf.urls.static import static
    from django.contrib.staticfiles.views import serve
    from django.views.decorators.cache import cache_control
    from django.conf import settings
    
    # YOUR urlpatterns here... 
    
    if settings.DEBUG:
        urlpatterns += static(settings.STATIC_URL, view=cache_control(no_cache=True, must_revalidate=True)(serve))
    

    I arrived at this by looking at how staticfiles modifies the urls automatically and just adding a view decorator. I really don't understand why this isn't the default as this is for development ONLY. The view is able to properly handle a "If-Modified-Since" HTTP header so a request is always made but contents are only transferred on changes (judged by looking at the modification timestamp on the file).

    For this to work you must add --nostatic when using runserver, otherwise the above changes are simply ignored.

    IMPORTANT EDIT: What I had before didn't work because I wasn't using --nostatic and the never_cache decorator also included no-store which meant unchanged files were always being re-transferred instead of returning 304 Not Modified

提交回复
热议问题