Django 修改 CSS/JS 后浏览器不更新?三步解决(附终极方案)
2026/6/10 1:44:17 网站建设 项目流程

适用场景:你用python manage.py runservergunicorn + nginx部署了 Django 项目,修改了 CSS、JS 或图片文件,刷新浏览器后没有任何变化。


问题现象

  • 明明改了 CSS 颜色,网页还是旧的。

  • 加了新图片,页面不显示。

  • 直接在浏览器地址栏输入静态文件 URL,发现内容没变。


根本原因

浏览器缓存 + Django 静态文件收集机制双重夹击:

  1. 浏览器会把下载过的 CSS/图片存到本地(Cache-ControlETag),下次直接读缓存,不请求服务器。

  2. Django 在生产环境(DEBUG=False)下不会自动提供静态文件,需要通过collectstatic把文件复制到 Nginx 服务的目录。


完整排查步骤

第一步:确认你修改的是正确的位置
  • ❌ 不要直接改staticfiles/目录(那是collectstatic的目标文件夹,会被覆盖)。

  • ✅ 应该修改 Django 项目中的static/源目录(或各 app 下的static/)。

bash

# 比如你的项目结构 /root/ashburn/static/mirror/application/blocks/accordion/view.css
第二步:重新收集静态文件

bash

cd /root/ashburn source venv_linux/bin/activate python manage.py collectstatic --noinput

这一步会把static/里的所有文件复制到STATIC_ROOT(例如/var/www/ashburn/staticfiles/)。

第三步:确认目标文件已更新

bash

grep "你修改的独特字符串" /var/www/ashburn/staticfiles/对应路径/你的文件.css

如果有输出,说明服务器端已经正确。

第四步:强制刷新浏览器(这一步最重要)
  • Windows/LinuxCtrl + Shift + R

  • MacCmd + Shift + R

或者直接打开无痕模式访问网站。

第五步:直接访问静态文件 URL 验证

在地址栏输入:

text

https://你的域名/static/path/to/file.css?v=20260609

查看返回的内容是否包含你的修改。如果包含,说明 Nginx 正常,问题只是浏览器缓存。


终极解决方案(一劳永逸)

在模板中引用静态文件时,加上版本号参数

django

{% load static %} <link rel="stylesheet" href="{% static 'css/style.css' %}?v=2">

每次修改文件后,把?v=2改为?v=3,浏览器会强制下载新文件。


🛠️ 如果以上所有方法都无效

可能是以下原因:

  • Nginx 的location /static/配置的alias路径不正确。

  • 文件权限问题(Nginx 用户www-data无法读取)。

  • 缓存服务器(如 CDN)拦截。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询