首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Django不会刷新静态文件

Django不会刷新静态文件
EN

Stack Overflow用户
提问于 2015-01-13 05:30:43
回答 13查看 90.1K关注 0票数 71

我在一个django模板上引用了一个JavaScript文件:

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

我对那个js文件做了一些修改。然后,我刷新了页面,但看不到更改的发生。

如果我从文件中删除JavaScript并将其放入HTML中,它可以正常工作,但如果我尝试使用外部js文件,它就不能正常工作。我已经多次尝试关闭服务器并运行runserver,我也尝试从火狐切换到Chrome。这完全没有意义。请帮助我理解,我可以在HTML中包含所有的js,但它困扰着我,我不能再以正常的方式来做了。

关于这个错误的更多详细信息(我发现的#$&%#最奇怪的事情):

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放在脚本标记中,当然,新的句子出现了。然后我添加了login.js文件,注释掉了html中的js,但我删除了login.js文件中的所有内容,使其成为一个空文件……但这句老话仍然会出现。

因此,旧的login.js文件必须存放在某个我不知道的地方。然后我打开Chrome,再试一次,同样的问题。

那会是什么呢?是否有强制django刷新静态文件的选项?我以为重启服务器就足够了。我应该重新启动我的计算机吗?

EN

回答 13

Stack Overflow用户

发布于 2015-01-13 06:40:58

听起来你的两个浏览器都缓存了javascript文件。在Chrome中,你可以通过按Ctrl + Shift + Del并勾选“缓存的图像和文件”来清除缓存。Firefox可能也有类似的快捷方式。

您可以查看this question上的提示,以完全禁用开发服务器上的静态文件缓存。

票数 27
EN

Stack Overflow用户

发布于 2017-07-27 07:28:07

你需要破坏浏览器的缓存。当为DEBUG=True时,此模板标记将输出基于时间的uuid。否则,它将查找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)

您将在如下所示的模板中使用:

{% load cache_bust %}

<link rel="stylesheet" href="{% static "css/project.css" %}?{% cache_bust %}"/>

下面是结果输出:

<link rel="stylesheet" href="/static/css/project.css?__v__=7d88de4e-7258-11e7-95a7-0242ac130005"/>
票数 20
EN

Stack Overflow用户

发布于 2018-05-22 20:42:40

代替使用复杂的解决方案,您可以在模板中的包含中添加额外的参数。

对于静态包括:

<script src="{% static 'js/polls/polls.js' %}?version=1"></script>

对于direct包括:

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

注意代码中的?version=1。每次修改css/js文件时,请在模板中更改此版本,以便强制浏览器重新加载该文件。

如果你因为一些未知的原因想要避免缓存,你可以使用当前的时间戳而不是版本:

<link rel="stylesheet" type="text/css" href="/site_media/css/style.css?{% now "U" %}" />
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27911070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档