对于 Django 中的静态文件和媒体文件,我感到困惑。我在其他地方看到人们混用它们。
我应该什么时候使用 media_root
,什么时候使用 static_root
?
如果我有站点图片,我应该将其放在静态目录吗?如果我有产品图片,是否应该将其放在媒体目录中?
对于 Django 中的静态文件和媒体文件,我感到困惑。我在其他地方看到人们混用它们。
我应该什么时候使用 media_root
,什么时候使用 static_root
?
如果我有站点图片,我应该将其放在静态目录吗?如果我有产品图片,是否应该将其放在媒体目录中?
MEDIA_ROOT
是文件上传的目录,通常也是生成文件的存储位置。例如,我的一个 Django 应用程序允许用户上传图像。在其中一个模型类中,我使用来自 sorl-thumbnail 的 ImageField
类型,并使用 upload_to='%Y-%m'
。每当用户上传一张图片时,文件将被存储在 MEDIA_ROOT/%Y-%m/
(%Y
替换为当前年份,%m
替换为当前月份)中。此外,当 sorl-thumbnail 为上传的图像生成缩略图时,默认情况下将缩略图放置在 MEDIA_ROOT/cache/
中。
STATIC_ROOT
用于配置静态资源文件的目录。例如,网站样式表、JavaScript 文件和用于设计网页的图像都属于需要放入 STATIC_ROOT
的文件类型。如果您安装了多个应用程序,则每个使用静态文件的应用程序都可以有自己的静态文件目录。您可以使用 collectstatic
管理函数(通过 python manage.py collectstatic
调用)将所有应用程序的静态文件复制到 STATIC_ROOT
中。
ImageField
和FileField
的文件都存储在MEDIA_ROOT
中,因此在这种情况下,是的,产品图片存储在MEDIA_ROOT
中(但您不需要手动将它们上传到MEDIA_ROOT
中——您的应用程序应该完成这个任务)。如果您手动维护产品图片并在模板的<img>
标签中引用它们,则产品图片应该放在STATIC_ROOT
中。 - Daniel Trebbien