Django 静态文件与媒体文件配置详解

周予安
周予安
发布时间:2026-10-13 | 6人浏览过
原创

本文详细解析Django项目中静态文件(STATIC)与用户上传文件(MEDIA)的配置方法。涵盖开发环境下的settings设置、urls路由配置,以及生产环境中Nginx服务器的处理逻辑,帮助开发者理清两者区别并实现正确部署。

Django 静态文件与媒体文件配置详解

静态文件配置

概述:

静态文件处理流程概述

在Web架构中,静态文件通常由专门的Web服务器处理,Django框架本身并不直接负责静态文件的传输。其基本处理流程如下(以Nginx为例):

当收到URI请求时,首先依据Web服务器中的配置规则进行判断。以Nginx为例,主要依据nginx.conf文件中定义的location规则进行匹配。

若请求的是静态文件,则直接由Nginx响应并返回文件内容。

若请求非静态文件,则将其转发给Django处理。Django根据urls.py中定义的路由规则进行匹配和处理。

上述流程适用于部署到Web服务器后的生产环境。为了简化开发过程,Django提供了开发环境下静态文件的自动处理机制,具体配置方法如下:

STATIC 配置详解

STATIC配置:

STATIC主要涵盖CSS、JavaScript、图片等前端资源文件:


STATIC_URL = '/static/' # 别名

STATICFILES_DIRS = [
  os.path.join(BASE_DIR, "static"), # 实际名,即实际文件夹的名字
]
# 注意:django对引用名和实际名进行映射,引用时,只能按照引用名来,不能按实际名去找

MEDIA 配置与开发环境处理

media配置:


MEDIA_URL = "/media/"

# 用户上传的文件(针对models.py中的FileField、ImageField字段)保存到哪
MEDIA_ROOT = os.path.join(BASE_DIR, "app名字", "media")

# 配合settings.py里的MEDIA_URL = "/media/"配置,即对外开放了这个接口的权限
from django.conf.urls import url
from django.views.static import serve
from . import settings

urlpatterns = [
  url(r'^media/(?P<path>.*)$', serve, {"document_root": settings.MEDIA_ROOT}),
]

注意:

静态文件的处理在Django中分为STATIC和MEDIA两类,初学者容易混淆。Django对两者的定义如下:

MEDIA:指代用户上传的文件,例如在Model中通过FileField或ImageField字段上传的文件。

例如,若定义MEDIA_ROOT = c:\temp\media,当执行models.FileField(upload_to="abc/")时,上传的文件将被保存到指定路径下。


c:\temp\media\abc
eg:
class blog(models.Model):
Photo = models.ImageField(upload_to="photo")

若上传图片至c:\temp\media\photo,需在settings.py中设置MEDIA_ROOT(必须为本地路径的绝对路径),通常配置如下:

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

MEDIA_URL是指访问这些文件时的URL前缀。例如:


    MEDIA_ROOT = c:\temp\media\photo
    MEDIA_URL = "/data/"

在开发阶段,Django会自动处理media文件的请求。

此时访问http://localhost/data/abc/a.png,实际上对应访问本地路径c:\temp\media\photo\abc\a.png。

在HTML模板中,引用图片的代码应写为<img src="/media/abc/a.png">。

生产环境 Nginx 部署配置

在生产部署阶段,最大的区别在于必须配置Web服务器来处理media文件。因此,需要在Web服务器中进行相应配置。

以确保Web服务器能够正确访问并返回media文件。

以Nginx为例,可在nginx.conf中配置如下:


       location ~/media/{
          root/temp/
          break;
        }

具体部署细节可参考关于如何在Nginx中部署Django的相关资料。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表