You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django图片访问报404错误,媒体资源配置问题求助

解决Django媒体文件访问404问题

问题根源

你把媒体文件的路由配置在了app的urls.py中,但Django的URL路由匹配是从**根urls.py**开始的。当请求/media/xxx这类地址时,根urls.py里没有对应的匹配规则,直接返回404,根本不会走到app的urls.py去匹配。

修复步骤

1. 将媒体文件路由移至根urls.py

打开项目根目录下的urls.py,添加媒体文件路由配置:

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    path('event_app/', include('event_app.urls')),  # 确保正确包含你的app路由
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

2. 移除app的urls.py中的媒体路由

删掉event_app/urls.py末尾的+ static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT),保留原有路由即可:

from django.urls import path
from .views import UserList, FeedbackList, DayList, AttractionList, UserDetail, UserProfileList, ProfileDetail
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView

urlpatterns = [
    path('users/', UserList.as_view()),
    path('user/<str:username>', UserDetail.as_view()),
    path('profiles/', UserProfileList.as_view()),
    path('profile/<str:user__username>', ProfileDetail.as_view()),
    path('feedbacks/', FeedbackList.as_view()),
    path('days/', DayList.as_view()),
    path('attractions/', AttractionList.as_view()),
    path('token/', TokenObtainPairView.as_view()),
    path('token/refresh/', TokenRefreshView.as_view()),
]

3. 验证核心配置

  • 确认settings.py中路径配置准确,可通过打印BASE_DIR验证根目录路径:
    import os
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
    MEDIA_URL = '/media/'
    
  • 重启Django开发服务器,再次访问图片URL即可正常加载。

额外提示

  • 生产环境下,不要用static()函数处理媒体文件,需用Nginx/Apache等web服务器直接提供媒体文件服务。
  • 确认user_directory_path函数生成的路径正确,文件确实存在于MEDIA_ROOT对应的子目录中。

内容的提问来源于stack exchange,提问作者Cleiton Oliveira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 23:35:24