如果 MEDIA_URL 在 STATIC_URL 内,runserver 无法提供媒体

dai*_*no3 9 django django-staticfiles

我的配置如下:

STATIC_URL = '/static/'
MEDIA_URL = '/static/media/'
Run Code Online (Sandbox Code Playgroud)

自从我将 django 2.1 升级到 2.2 后,我得到:

"runserver can't serve media if MEDIA_URL is within STATIC_URL."
django.core.exceptions.ImproperlyConfigured: runserver can't serve media if MEDIA_URL is within STATIC_URL.
Run Code Online (Sandbox Code Playgroud)

我理解错误。我的问题是“为什么不”?您希望媒体作为 static 的子目录有非常充分的理由。

此外,在 2.2 发行说明中零提及此重大更改:https : //docs.djangoproject.com/en/3.0/releases/2.2/

Cha*_*thk 9

此警告是为了响应此票证#29570:添加检查 MEDIA_URL 不在 STATIC_URL 内。

还引用#15199:允许 STATIC_ROOT 内的 MEDIA_ROOT

在与 jezdez 进行进一步的 IRC 讨论后,关闭此问题不会修复。支持 STATIC_ROOT 内的 MEDIA_ROOT 配置会引入许多额外的复杂性以及静态文件和 MEDIA_* 设置之间的耦合,这是我们试图避免的,目前尚不清楚它会给我们带来什么有意义的好处。提到的主要好处是在前端 Web 服务器上只需要一个别名:这似乎很小,因为别名只是 nginx conf 文件中的一行。在任何情况下,通过将 MEDIA_ROOT 和 STATIC_ROOT 并排放置在父目录中,并将前端 Web 服务器别名到该父目录,可以获得相同的结果。

所以基本上,你可以:

STATIC_URL = '/static/static/'
MEDIA_URL = '/static/media/'
Run Code Online (Sandbox Code Playgroud)