Ale*_*lla 42 django django-staticfiles
这很烦人.我在django模板上引用了一个javascript文件:
<script src="{% static 'js/login.js' %} "></script>
Run Code Online (Sandbox Code Playgroud)
我对那个js文件做了一些更改.然后,我刷新页面,我看不到发生的变化.
如果我从文件中删除javascript并将其放入HTML中,它可以正常工作,但如果我尝试使用外部js文件,那么它不会.我试过关闭服务器并多次运行runserver,我也尝试过从Firefox更改为Chrome.这根本没有意义.请帮助我理解,我可以在HTML中包含所有js,但令我困扰的是,我不能以正常的方式做到这一点.
有关此错误的更多详细信息(我发现的#$&%#weirdest事件):
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.
Run Code Online (Sandbox Code Playgroud)
所以,我改变了js并重新启动服务器,html仍显示旧句子.然后我删除了对login.js文件的引用,并将所有js放在HTML中的脚本标记内,当然,出现了新的句子.然后我包含login.js文件,注释掉html里面的js但我删除了login.js文件中的所有内容,使其成为一个空文件......但是旧句子仍然显示出来.因此旧的login.js文件必须在我不知道的地方兑现.然后我打开Chrome并再次尝试,同样的问题.
它能是什么?有强制django刷新静态文件的选项吗?我以为重启服务器就足够了...我应该重启我的电脑吗?:/ 大声笑.
Dan*_* Tz 55
清除静态文件python manage.py collectstatic --noinput --clear
.这将事先清除静态.
清除浏览器缓存
在js文件包含后添加随机字符串,例如jquery.js?rand = 23423423,每次加载.
它有帮助吗?
Der*_*old 16
您需要破坏浏览器缓存.此模板标记将在何时输出基于时间的uuid DEBUG=True
.否则它将寻找PROJECT_VERSION
环境变量.如果未找到,则会输出静态版本号.
import os
import uuid
from django import template
from django.conf import settings
register = template.Library()
@register.simple_tag(name='cache_bust')
def cache_bust():
if settings.DEBUG:
version = uuid.uuid1()
else:
version = os.environ.get('PROJECT_VERSION')
if version is None:
version = '1'
return '__v__={version}'.format(version=version)
Run Code Online (Sandbox Code Playgroud)
你会在这样的模板中使用:
{% load cache_bust %}
<link rel="stylesheet" href="{% static "css/project.css" %}?{% cache_bust %}"/>
Run Code Online (Sandbox Code Playgroud)
这是结果输出:
<link rel="stylesheet" href="/static/css/project.css?__v__=7d88de4e-7258-11e7-95a7-0242ac130005"/>
Run Code Online (Sandbox Code Playgroud)
”静态文件的更改不起作用”。这可能有多种原因。
您的浏览器属于storing cache
您的静态文件。
解决方案 (1):打开Incognito/Private window
解决方案(2):使用硬刷新:
cmd + shift + r
ctr + shift + r
如果您在生产中遇到此问题,请按照以下步骤操作:
staticfiles
通过以下命令删除文件夹:
sudo rm -rf staticfiles
[在您的项目目录中]
现在运行collectstatic
命令:python3 manage.py collectstatic
重新启动gunicorn
,通过以下命令:sudo systemctl restart gunicorn
重新启动nginx
,通过以下命令:sudo systemctl restart nginx
有时浏览器会将这些静态文件数据(作为缓存)存储一段时间。几个小时后,问题可能会消失。
希望这会解决您的问题。
您可以向模板中的包含添加额外的参数,而不是使用复杂的解决方案。
对于静态包括:
<script src="{% static 'js/polls/polls.js' %}?version=1"></script>
Run Code Online (Sandbox Code Playgroud)
对于直接包括:
<link rel="stylesheet" type="text/css" href="/site_media/css/style.css?version=1" />
Run Code Online (Sandbox Code Playgroud)
注意?version=1
代码中的。每次修改 css/js 文件时,在模板中更改此版本,因此浏览器将被迫重新加载文件。
如果您想完全避免出于某种未知原因缓存,您可以使用当前时间戳而不是版本:
<link rel="stylesheet" type="text/css" href="/site_media/css/style.css?{% now "U" %}" />
Run Code Online (Sandbox Code Playgroud)
一种解决方案是将设置更改为以下内容:
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.ManifestStaticFilesStorage'
Run Code Online (Sandbox Code Playgroud)
其作用是创建静态文件的副本,文件名中包含内容哈希(运行时collectstatic
)。这样,当内容更改时,文件名也会更改,并且不会使用旧的缓存。唯一的问题是它在模式下不会被使用DEBUG = True
,所以你必须进行移位重新加载来进行硬重新加载。
您可以阅读ManifestStaticFilesStorage 上的文档以获取更多信息。
编辑: 我找到了一个确保静态文件不会缓存在开发中的解决方案,并将其发布在另一个问题上。
归档时间: |
|
查看次数: |
54358 次 |
最近记录: |