如何解决Django项目中静态图片部分页面404错误问题?
Django静态文件Logo部分页面404的原因及解决办法
兄弟,你这个问题其实很好解决,核心原因就是你用了相对路径来引用Logo文件,这会导致不同URL层级的页面解析路径时出现偏差:
- 当你在首页(比如URL是
/)时,浏览器会把../static/img/acceler8_logo.png解析成/static/img/acceler8_logo.png,刚好匹配你的静态文件路径,所以能正常显示; - 但如果是在二级或更深层级的页面(比如URL是
/dashboard/或者/blog/post/1/),相对路径../会被解析到当前URL的上一级目录,比如/blog/post/1/页面会把路径解析成/blog/static/img/acceler8_logo.png——这个路径根本不存在,自然就返回404了。
Django早就为这种场景准备了完美的解决方案,你只需要改用它提供的静态文件模板标签就行,步骤如下:
- 先在
base.html的最顶部加载静态文件标签:
{% load static %}
- 把图片的
src属性改成用{% static %}生成绝对路径:
<a class="navbar-brand" href="{% url 'index' %}"> <img src="{% static 'img/acceler8_logo.png' %}" id="acc-logo"> </a>
这样不管你的页面在哪个URL层级,{% static %}都会根据你settings.py里配置的STATIC_URL,生成固定正确的绝对路径(比如/static/img/acceler8_logo.png),彻底避免相对路径的解析问题。
另外,你的settings.py里的STATIC_URL和STATICFILES_DIRS配置是没问题的,如果以后部署到生产环境,记得运行python manage.py collectstatic命令把所有静态文件收集到统一的目录里就行。
内容的提问来源于stack exchange,提问作者samalty
相关产品推荐
相关产品推荐

