繁体   English   中英

如何禁用 django 中的 static 缓存?

[英]How can I disable the static cache in django?

目前我已经用 django 开发了几个月的应用程序,我注意到一旦你完成了应用程序接口的开发并想将它们集成到后端,一切正常,时间过后它变得一团糟不得不修改 static 文件,因为 django缓存这些文件可能是为了更有效地呈现模板,但是当我想进行更改时,我必须重命名文件并将其重新插入到我的 index.html 中,以便 django 将其检测为“作为新文件”。 如您所见,这样工作很烦人。 有谁知道如何解决这个问题?

解决方案取决于所使用的 web 服务器技术。 例如,如果您使用 nginx 作为 web 服务器,则可以终止某些特定文件的缓存,例如:

location ~* \.(css|js)$ {
    expires -1;
}

但我不建议这样做。 这将完全禁用缓存并强制客户端始终下载资产,即使它们没有更改。 这不是好的做法。

出于这个原因,我推荐以下方法:只需在要强制下载的资产后添加一个 GET 参数:

<link href="style.css?v=1" rel="stylesheet" type="text/css">

这样,您可以控制何时希望前端再次加载资产(更改参数值),并且您仍然可以从缓存 static 资产中受益。

这种方法不仅适用于 Django,而且适用于所有网站。

你可以猴子补丁视图负责服务 static 个文件:

from functools import wraps

import django.views.static


def no_cache_static(f):
    @wraps(f)
    def static(*a, **kw):
        response = f(*a, **kw)
        response.headers["Cache-Control"] = "no-cache"
        return response

    return static


django.views.static.serve = no_cache_static(django.views.static.serve)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM