Django - 我应该何时使用media_root或static_root?

25

对于 Django 中的静态文件和媒体文件,我感到困惑。我在其他地方看到人们混用它们。

我应该什么时候使用 media_root ,什么时候使用 static_root

如果我有站点图片,我应该将其放在静态目录吗?如果我有产品图片,是否应该将其放在媒体目录中?

1个回答

35

MEDIA_ROOT 是文件上传的目录,通常也是生成文件的存储位置。例如,我的一个 Django 应用程序允许用户上传图像。在其中一个模型类中,我使用来自 sorl-thumbnailImageField 类型,并使用 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 中。


谢谢您的回复。我还有一个后续问题。如果我有产品图片呢?应该放在哪里?管理员可以上传并应该在网站上显示。 - bash-
@bash-:您是否将产品图片的路径存储在数据库中?ImageFieldFileField的文件都存储在MEDIA_ROOT中,因此在这种情况下,是的,产品图片存储在MEDIA_ROOT中(但您不需要手动将它们上传到MEDIA_ROOT中——您的应用程序应该完成这个任务)。如果您手动维护产品图片并在模板的<img>标签中引用它们,则产品图片应该放在STATIC_ROOT中。 - Daniel Trebbien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接