Django配置后通过URL访问静态图片提示不存在该如何解决
问题原因
- MEDIA_ROOT路径配置错误:你写的
MEDIA_ROOT = os.path.join(BASE_DIR, '/static/images')中,第二个路径参数开头带斜杠,os.path.join拼接时会直接丢弃前面的BASE_DIR,最终MEDIA_ROOT指向系统根目录下的/static/images,而非项目根目录下的对应文件夹,Django无法定位到你存放的图片。 - 静态路由配置错误:你在路由中配置STATIC资源时使用了
STATIC_ROOT作为路径根目录,但你的配置文件仅定义了开发环境用的STATICFILES_DIRS,未配置STATIC_ROOT(生产环境静态文件导出目录),导致/static/前缀的资源匹配异常。 - 访问路径不匹配:从报错信息可见你实际请求的是
/static/前缀的图片,但你把图片存放在了static/images子目录下,直接请求/static/[图片名]自然无法找到资源。
解决方法
- 修正MEDIA_ROOT配置,去掉路径开头的斜杠:
MEDIA_ROOT = os.path.join(BASE_DIR, 'static/images')
- 调整路由配置,DEBUG=True的开发环境下Django会自动处理STATIC_URL的请求,仅保留MEDIA路由即可:
urlpatterns = [ path('admin/', admin.site.urls), path('api/', include('api.urls')) ] urlpatterns += static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
- 按规则使用对应访问路径:
- 走STATIC静态文件规则访问:路径为
http://127.0.0.1:8000/static/images/[图片名] - 走MEDIA资源规则访问:路径为
http://127.0.0.1:8000/images/[图片名]
内容的提问来源于stack exchange,提问作者Been-H
相关产品推荐
相关产品推荐

