【发布时间】:2015-03-10 18:07:45
【问题描述】:
我在 django 模板上引用了一个 JavaScript 文件:
<script src="{% static 'js/login.js' %} "></script>
我对该 js 文件进行了一些更改。然后,我刷新页面,我看不到更改发生。
如果我从文件中删除 JavaScript 并将其放入 HTML 中,它可以正常工作,但如果我尝试使用外部 js 文件执行此操作,则它不会。我已经尝试关闭服务器并运行 runserver 几次,我也尝试从 Firefox 更改为 Chrome。这根本没有意义。请帮助我理解,我可以将所有 js 包含在 HTML 中,但让我感到困扰的是,我不能再以正常的方式做到这一点了。
有关此错误的更多详细信息(我发现的 #$&%# 最奇怪的事情):
JavaScript 是这样的:
old_sentence = "Dig that hole, forget the sun" // this is what I want to change
$("#jqselector").text(old_sentence)
new_sentence = "Run, rabbit, run" // this is the new sentence, it just won't show up.
所以,我换了js,重启了服务器,html还是显示老句。然后我删除了对login.js文件的引用,把所有的js里面的script标签放到了HTML中,当然新的句子出现了。然后我包含login.js文件,注释掉html里面的js但是我删除了login.js文件里面的所有内容,使它成为一个空文件……但是旧的句子仍然出现。
因此,旧的login.js 文件必须在我不知道的某个地方兑现。然后我打开 Chrome 并再次尝试,同样的问题。
可能是什么?是否有强制 django 刷新静态文件的选项?我认为重新启动服务器就足够了。我应该重新启动计算机吗?
【问题讨论】:
-
你试过运行
python manage.py collectstatic吗?听起来您正在修改 javascript 的工作副本,并且它正在引用收集/过期的文件。 -
您是否尝试使用 Ctrl-F5 刷新页面并清除缓存?
-
感谢您的 cmets 和您的时间。我已经发现了错误,这确实是一个奇怪的错误。我发现 django 将本地环境静态文件指向我在部署时使用的 AWS 存储桶。所以...运行 collectstatic 是我猜的解决方案的一部分,剩下的就是重新配置我的静态文件设置并以某种方式解决 AWS Bucket 问题。
-
如果你在 django 中使用 uwsgi,你可能需要重启 uwsgi 以避免提供旧内容stackoverflow.com/a/12632061/4061047
-
我不确定这是否仍然相关,但如果您设置了 staticfiles_dirs 并且不仅是静态根目录,那么 django 可能会在开发环境中提供来自 _dirs 的静态文件,而不是来自根。这就是发生在我身上的事情。如果我在根目录中处理静态文件,则在运行 collectstatic 之前不会应用任何更改。如果我在 _dir 中处理静态文件,则 Ctrl+F5 会应用更改。