在 Django 中静态文件和媒体文件有什么区别?

我正在迁移到 Django 1.3,发现媒体和静态文件的分离有点令人困惑。下面是默认 settings.py的样子:

# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/home/media/media.lawrence.com/media/"
MEDIA_ROOT = ''


# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash if there is a path component (optional in other cases).
# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
MEDIA_URL = ''


# Absolute path to the directory that holds static files.
# Example: "/home/media/media.lawrence.com/static/"
STATIC_ROOT = ''


# URL that handles the static files served from STATIC_ROOT.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/static/'

我应该把什么放入 MEDIA_ROOTSTATIC_ROOT? 这些应该是单独的目录吗? 有什么区别?

19635 次浏览

静态文件用于 javascript/images 等,而媒体文件用于用户上传的内容。

正如 Uku Loskit 所说,静态文件用于应用程序的 css 文件、 javascript 文件、图像等。媒体文件通常是用户或管理员可上传的文件。

通常,您希望 MEDIA_ROOTSTATIC_ROOT是独立的目录。请记住,STATIC_ROOT是管理命令 collectstatic放置它找到的所有静态文件的位置。在生产中,当给定一个以 STATIC_URL开始的请求时,您可以配置您的 webserver 为 STATIC_ROOT之外的文件提供服务。如果您使用 Django devserver 进行开发,它将自动提供静态文件。

因此,staticfiles 应用程序将用户上传的媒体从应用程序媒体中分离出来,从而使部署、备份和版本控制更加容易。在 staticfiles 应用程序出现之前,开发人员通常将媒体文件与静态应用程序资产混合在一起。

用于静态文件的1.3 docs 一直在稳步改进; 要了解更多细节,请看 怎么做