Django静态文件两类404错误求助:图片路径异常及文件夹访问问题
Django静态文件404问题排查与解决
现状更新
willeM_ Van Onsem提供的语法修复已经解决了图片路径被追加多余字符的问题,现在只剩普通的404错误。修复后发现更多文件都出现这类问题,说明daterangepicker文件夹并没有特殊性,问题是普遍存在的。
原问题回顾
在把一个主题集成到Django项目时,部分静态文件能正常访问,但之前遇到两类404错误:
1. 图片路径被追加无效字符(已修复)
模板里的代码:
<img class="rounded-circle" src="{% static 'sleek-bootstrap/source/assets/img/user/u6.jpg" alt="Image' %}">
对应的错误日志:
"GET /static/sleek-bootstrap/source/assets/img/user/u6.jpg%22%20alt%3D%22Image 404 1958
实际文件/static/sleek-bootstrap/source/assets/img/user/u6.jpg是存在的,但Django把" alt="Image的URL编码(%22%20alt%3D%22Image)加到了路径后面,导致找不到文件。所有图片都有这个问题,现已通过语法修复解决。
2. 特定目录文件无法访问(现已确认非特例)
模板代码:
<script src="{% static 'sleek-bootstrap/source/assets/plugins/daterangepicker/moment.min.js' %}"> ></script>
错误日志:
"GET /static/sleek-bootstrap/source/assets/plugins/daterangepicker/moment.min.js HTTP/1.1" HTTP/1.1" 404 1958
一开始以为只有daterangepicker子文件夹里的文件访问不了,/static/sleek-bootstrap/source/assets/plugins/下的其他文件都正常,但修复图片问题后发现更多目录都有404,说明这个文件夹没特殊问题,是普遍的静态文件访问问题。
排查与解决步骤
针对当前的普通404问题,按以下步骤检查:
- 核对静态文件配置:打开
settings.py,确认STATIC_URL、STATIC_ROOT(生产环境)、STATICFILES_DIRS(开发环境)的配置是否正确,确保Django能找到所有静态文件所在的目录。 - 重新收集静态文件:如果是生产环境,执行
python manage.py collectstatic,把所有静态文件同步到STATIC_ROOT指定的目录;开发环境下确保runserver已开启静态文件服务(默认开启,可检查INSTALLED_APPS里是否包含django.contrib.staticfiles)。 - 检查路径大小写:在Linux/macOS系统下,文件路径区分大小写,模板里的路径要和实际文件系统里的完全一致,比如
Daterangepicker和daterangepicker会被视为不同路径。 - 确认文件权限:确保Web服务器(如Nginx、Apache)或Django开发服务器有读取静态文件目录及文件的权限,避免因权限不足导致无法访问。
- 清空浏览器缓存:浏览器可能缓存了旧的无效路径,试试用无痕模式打开页面,或清空缓存后再访问。
内容的提问来源于stack exchange,提问作者Bret Hess
相关产品推荐
相关产品推荐

