2013-07-21 121 views
5

在我的Django项目的应用程序my_app有它引用一个javascript静态文件的模板:Django的静态文件不更新

<script src="{% static 'my_app/my_script.js' %}"></script> 

一旦我安装程序my_app /模板/程序my_app my_script.js,一切似乎工作。 在某些时候,我用一个不同的脚本覆盖了my_script.js,使得my_script.js现在有不同的内容。

但是,当我加载my_app与我的浏览器,它加载旧的my_script.js,虽然它不再存在。 我该如何解决它? 谢谢。

回答

2

您可以添加一个cache-busting?get =参数。我喜欢定义一个读取文件的{%statichash%}模板标签,并将文件内容的散列追加为get参数。这是类似的,使用该文件的修改时间,而不是哈希的,但同样的想法:

https://bitbucket.org/ad3w/django-sstatic/src/4401a4bc3058618dfc2eafaee6a23d287a99ede5/sstatic/templatetags/sstatic.py?at=default

+0

感谢刷新页面。我应该使用“?get = parameter”像这样:?然后将{%statichash%}添加到模板中?我刚刚尝试过,它似乎不喜欢{%statichash%}。 – jazzblue

+0

不,对不起,get =参数只是我试图聪明,并结合解释和一个例子。只需从bitbucket链接中将sstatic模板标记代码复制到您的templatetags文件中(如果您还没有django文档,请查看如何添加一个django文档),并使用{%sstatic'foobar'%}而不是{%静态'foobar'%}。 Hieu Nguyen的方法也应该可行,但还没有测试过,可能需要将?v = 0000X移到%}之后。 – AdamKG

6

我经常使用?v=00001或任何确定数量的强制清除高速缓存中的浏览器。所以你的情况可能是:

<script src="{% static 'my_app/my_script.js?v=00001' %}"></script> 

或者:

<script src="{% static 'my_app/my_script.js' %}?v=00001"></script> 

下一次你改剧本,增加了数00002。当然也有很多方法可以做到这一点,但我还是更喜欢这种方法。

+0

这看起来很简单,很好,但不知何故,我的Firefox不喜欢它,不知道其他浏览器。 – jazzblue

+0

答复已更新。现在怎么样? –

+0

在Chrome中完美工作,最佳答案。谢谢。 –

0

我修复了它,包括编写代码来刷新浏览器。 这样,它将始终获取最新更新的静态文件,而不是从其缓存读取 。

有3种方法可以做到这一点。

  1. 手动刷新页面

使用Windows操作系统与浏览器谷歌Chrome或IE9,打(CTRL + F5)

  • 刷新页面一定的时间间隔(在本例中,浏览器刷新每3秒) <head>

    <meta http-equiv="refresh" content="3" >

    </head>

  • 当用户点击一个按钮

    <form>

    <INPUT TYPE="button" onClick="history.go(0)" VALUE="Refresh">

    </form>