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

Django Admin FileField生产环境下载404问题求助

Django生产环境FileField下载404问题解决

核心原因

生产环境下DEBUG=False时,django.conf.urls.static.static()不会向路由中添加/media和/static的映射规则——这个方法仅用于开发环境。文件虽然上传到了正确目录,但Web服务器(比如Nginx/Apache)没有配置对应的路径映射,导致请求/media路径时找不到资源,返回404。

分步解决方案

  • 确认生产环境DEBUG状态
    检查settings.py中DEBUG = False,生产环境绝对不能开启DEBUG,否则会暴露敏感信息且性能低下。

  • 配置Web服务器映射/media路径
    以Nginx为例,在站点配置文件中添加以下location块,替换/path/to/your/media/dir为你实际的MEDIA_ROOT绝对路径:

    location /media/ {
        alias /path/to/your/media/dir/;
        expires 30d;
    }
    

    配置完成后重启Nginx:sudo systemctl restart nginx

  • 检查文件与目录权限
    确保Web服务器进程(通常是www-data)对MEDIA_DIR目录及其中的文件有读取权限:

    # 设置目录权限
    sudo chmod -R 755 /path/to/your/media/dir
    # 设置所有者为Web服务器用户
    sudo chown -R www-data:www-data /path/to/your/media/dir
    
  • 验证MEDIA_ROOT的绝对路径
    在Django shell中打印实际路径,确认路径正确:

    python manage.py shell
    >>> from django.conf import settings
    >>> print(settings.MEDIA_ROOT)
    

    确保输出的路径和文件实际存储的目录完全一致,没有拼写错误或相对路径问题。

  • 移除生产环境urls.py中的static()调用
    既然生产环境用Web服务器处理静态文件,urls.py里的+ static(...)可以删掉,避免混淆:

    urlpatterns = [
        path('jet/', include('jet.urls', 'jet')),
        path('admin/', admin.site.urls),
    ]
    

你的配置分析

当前urls.py中通过static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)添加的路由,在DEBUG=False时会被Django忽略,这就是下载404的直接原因。MEDIA_URL和MEDIA_ROOT的配置本身是正确的,问题出在生产环境的服务方式上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:50:41