Django 应用程序不更新浏览器中的静态文件

Posted

技术标签:

【中文标题】Django 应用程序不更新浏览器中的静态文件【英文标题】:Django app not updating static files in browser 【发布时间】:2018-02-16 08:07:11 【问题描述】:

当第三方应用程序的静态文件在带有runserver 的浏览器中提供时,它不会在我的 Django 站点中更新。

这是我的文件结构(还有更多静态文件):

- mysite
  - mysite
    - settings.py
    - wsgi.py
    . . .
  - myapp
    - templates
      - base.html
      - myapp.html
    - models.py
    - forms.py
    . . . 
  - static
    - MyApp
      - mystyle.css
    - autocomplete-light
      - select2.css

base.html:

% load static %
<!DOCTYPE html>
<html>
<head>
  <title>
    % block title %Portal% endblock title %
  </title>
  % block stylesheets %
    <link rel="stylesheet" type="text/css" href="% static 'myapp/mystyle.css' %?% now "U" %"/>
  % endblock stylesheets %
</head>
<body>
  % block content %
  % endblock content %
</body>
<footer>
  % block footer %
  % endblock footer %
</footer>
</html>

myapp.html:

% extends "myapp/base.html" %
% load static %
% load crispy_forms_tags %
% block title %My App% endblock title %
% block stylesheets %
   block.super 
% endblock stylesheets %
% block content %
  % crispy formset helper %
% endblock content %
% block footer %
<script type="text/javascript" src="% static 'admin/js/vendor/jquery/jquery.js' %?% now "U" %"></script>
 formset.media 
% endblock %

settings.py(相关部分):

STATIC_ROOT = 'C:/Users/username/mysite/static/'
STATIC_URL = '/static/'

我使用python manage.py collectstatic 将我的应用程序和第三方应用程序(django-autocomplete-light)的静态文件收集到STATIC_ROOT。它们存在于 STATIC_ROOT 中。然后我用runserver 为我的网站提供服务。静态文件与站点一起加载,它们的路径匹配回STATIC_ROOT。当我编辑静态文件(即自动完成应用程序的select2.css)时,更改显示在STATIC_ROOT 中。但是,它们不会显示在浏览器中。

我已尝试清除缓存、在各种浏览器中为站点提供服务、终止/重新启动 runserver、终止/重新启动我的文本编辑器以及重新运行 collectstatic。这些尝试都没有奏效 - 加载站点时静态文件根本不会更新。

如何让静态文件在浏览器中更新?我想我可能缺少settings.py 中的设置,或者可能是 formset.media 的问题。不过,我很茫然。

【问题讨论】:

你能看看这个docs.djangoproject.com/en/1.11/intro/tutorial06 我已经阅读了该内容,但我认为我的设置方式没有任何问题。你在想什么? 可能需要重启并清除所有缓存,可能您的浏览器返回一个缓存文件(删除浏览器历史记录) 正如我在问题中提到的,我已经采取了所有这些步骤。这不是浏览器问题。 【参考方案1】:

记得添加STATICFILES_DIRS,Django 需要静态文件的 url:

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
    '/var/www/static/', # If you have more staticfiles this will be the order
)

也看看这个What is the difference between % load staticfiles % and % load static %

【讨论】:

以上是关于Django 应用程序不更新浏览器中的静态文件的主要内容,如果未能解决你的问题,请参考以下文章

Django - 在不重新启动开发服务器的情况下应用 HTML 和静态文件中的更改

Django 更新配置文件

CSS静态文件未在Django中加载

django -静态文件能加载进入,但是在页面上却显示不出来

如何使用 django 更新会计应用程序中的余额?

如何更新/替换 Django FileField() 中的文件