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

Django Rest Framework中无法查看ImageField图片的问题

Django媒体文件URL访问404问题排查与解决

问题场景

我在Django项目中配置了图片上传功能,相关代码如下:

模型定义

image_url = models.ImageField(upload_to=upload_to, blank=True, null=True)

序列化器配置

image_url = serializers.ImageField(required=False, use_url=True)

视图集代码

class ProductViewSet(viewsets.ModelViewSet):
    queryset = Product.objects.order_by('-id')
    serializer_class = ProductSerializer
    parser_classes = (MultiPartParser, FormParser)
    permission_classes = [
        permissions.IsAuthenticatedOrReadOnly]

    def perform_create(self, serializer):
        serializer.save()

媒体文件配置

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

urls.py配置

urlpatterns = [
    path("users/", include("user.urls")),
    path("products/", include("products.urls")),
    path("utils/", include("utils.urls")),
    path("auth/", include("djoser.urls")),
    path("auth/", include("djoser.urls.jwt")),
    path("graphql/", csrf_exempt(GraphQLView.as_view(schema=schema, graphiql=True))),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

当前接口可正常返回图片URL(如http://127.0.0.1:8000/media/images/base_bWxtftQ.png),但访问该URL时出现404错误,且图片实际存在于对应文件夹中。


排查与解决步骤

1. 确认BASE_DIR与MEDIA_ROOT路径正确性

检查settings.py中BASE_DIR的定义是否指向项目根目录,标准定义应为:

BASE_DIR = Path(__file__).resolve().parent.parent

通过python manage.py shell执行以下命令验证路径:

from django.conf import settings
print(settings.MEDIA_ROOT)

确保输出路径与实际媒体文件存储路径完全一致,若不一致则调整MEDIA_ROOT的定义。

2. 检查静态服务生效环境

static()函数仅在**开发环境(DEBUG=True)**下生效。若项目运行在DEBUG=False的生产环境,需通过Nginx、Apache等Web服务器配置/media/路径的静态服务,直接指向MEDIA_ROOT目录。

3. 验证URL路由优先级

确保+ static(...)的配置放在urlpatterns的最后,避免被其他路由规则(如某个app中定义的path('media/', ...))覆盖,导致媒体文件路由无法匹配。

4. 检查文件与目录权限

在Linux/macOS环境下,确保media目录及其子文件、文件夹的权限允许Web服务器进程读取:

chmod -R 755 media/

同时确认运行Django的系统用户对media目录拥有读取权限。

5. 校验upload_to函数逻辑

检查自定义的upload_to函数,确保其生成的存储路径与URL中返回的路径一致。例如若upload_to返回images/,则图片需存储在MEDIA_ROOT/images/下,URL路径也应为/media/images/xxx.png,路径不匹配会导致404错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 21:43:30