django STATICFILES_DIRS 设置不应包含 STATIC_ROOT 设置

Posted

技术标签:

【中文标题】django STATICFILES_DIRS 设置不应包含 STATIC_ROOT 设置【英文标题】:django The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting 【发布时间】:2018-08-01 10:53:09 【问题描述】:

我正在 Heroku 上部署一个 Django 应用程序。

在我的设置模块中,我已配置为托管静态文件,例如

STATIC_ROOT = os.path.join(BASE_DIR, 'static_my_project')
STATIC_URL = '/static/'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static_my_project')
]

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static_cdn', 'media_root')

urls.py

urlpatterns = urlpatterns + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns = urlpatterns + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

但是在部署到 heroku 时,它会给出错误

SystemCheckError: System check identified some issues:

ERRORS:
?: (staticfiles.E002) The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting.

【问题讨论】:

如果静态根目录与static_dirs相同,则无需在设置中设置。 STATICFILES_DIRS 是 Django 将在其中搜索其他静态文件的文件夹列表,以及安装的每个应用程序的每个静态文件夹。 STATIC_ROOT 是在 manage.py collectstatic 之后将存储每个静态文件的文件夹 Please folllow this link - 我从 *** 中找到了答案 【参考方案1】:

可能会有所帮助。

STATIC_URL = '/static/'
    
    if not DEBUG:
        STATIC_ROOT = ''
    
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'static/'),
    ]

【讨论】:

【参考方案2】:

问题在于 STATIC_ROOT 和 STATICFILES_DIRS 名称不能相同。 static root 用于 django 的 collectstatic 命令。 如果不使用它,您可以将其删除。 如果不将其默认位置(在 django 应用程序内)更改为其他位置,例如 base 或其他位置,也可以删除静态文件目录。

【讨论】:

以上是关于django STATICFILES_DIRS 设置不应包含 STATIC_ROOT 设置的主要内容,如果未能解决你的问题,请参考以下文章

Django静态文件的加载以及STATIC_ROOT 与STATICFILES_DIRS的区别

django STATIC_URL STATIC_ROOT STATICFILES_DIRS的区别

django STATICFILES_DIRS 设置不应包含 STATIC_ROOT 设置

Django的静态文件的配置

python django 访问static静态文件

Python Django 之 静态文件存放设置