收集静态文件会抛出 ImproperlyConfigured
Posted
技术标签:
【中文标题】收集静态文件会抛出 ImproperlyConfigured【英文标题】:Collecting staticfiles throws ImproperlyConfigured 【发布时间】:2015-01-28 14:15:43 【问题描述】:我正在使用 Django 1.7。将我的站点部署到生产服务器并运行 collectstatic
时,我收到以下错误消息:
django.core.exceptions.ImproperlyConfigured: The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting
我使用拆分设置;我的作品local.py
包含:
STATIC_ROOT = '/home/username/projects/site/static/'
我的base.py
包含:
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
【问题讨论】:
Can I make STATICFILES_DIR same as STATIC_ROOT in Django 1.3? 的可能重复项 可能,但在 Google 中搜索“django.core.exceptions.ImproperlyConfigured: STATICFILES_DIRS 设置不应包含 STATIC_ROOT 设置”并没有将我指向那个。 那是因为你有引号。这个问题是关于同一个问题。 【参考方案1】:根据docs,collectstatic会将各个文件夹中的文件复制到STATIC_ROOT中。
因此,您不能使用STATICFILES_DIRS
中的STATIC_ROOT
文件夹。
解决方案:将STATIC_ROOT
更改为例如STATIC_ROOT = '/home/username/projects/site/assets/'
【讨论】:
Django 1.7 的“文档”链接不再有效,但如果您将其中的 Django 版本号从 1.7 增加到 3.2,它就可以工作:docs.djangoproject.com/en/3.2/ref/contrib/staticfiles【参考方案2】:当我尝试使用压缩器时,我遇到了同样的错误(staticfiles.E002) The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting.
主要问题是我的 settings.py 文件
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]
删除或评论:
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]
【讨论】:
那么你如何从开发服务器提供静态文件呢? (通过python manage.py runserver
)
会遇到错误:raise ImproperlyConfigured("You're using the staticfiles app" django.core.exceptions.ImproperlyConfigured: You're using the staticfiles app without STATIC_ROOT setting to a filesystem路径。
@Eric 建议将STATIC_ROOT
设置为os.path.join(BASE_DIR, 'var', 'static')
,如果您执行collectstatic
命令,该目录将包含由django 复制的静态文件。该命令将在STATICFILES_DIRS
中查找静态文件,如果您运行runserver
,那么它将提供来自STATICFILES_DIRS
的静态文件。【参考方案3】:
我知道这是一篇旧帖子,但这个解决方案对我有用,可能对其他人有所帮助。
在settings.py中:
if DEBUG:
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
else:
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
【讨论】:
不是 100% 确定,但我认为这不会与 collectstatic 很好地交互?【参考方案4】:解决办法是,如果你运行的是Django开发服务器,就不能设置STATIC_ROOT:
import sys
if sys.argv[1] != 'runserver':
STATIC_ROOT = os.path.join(BASE_DIR, "static")
在 Windows 10 开发环境中使用 Django 2.1 以及在生产环境中的 AWS 上的 Ubuntu 18.04 docker 容器中进行测试。
【讨论】:
【参考方案5】:在 settings.py 中将静态根目录设置为虚拟环境,以便将静态文件收集到文件夹 static_in_env
STATIC_ROOT=os.path.join(VENV_PATH,'static_in_env/')
【讨论】:
【参考方案6】:在Django 1.11 documentation看到这个
urlpatterns = [
# ... the rest of your URLconf goes here ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
如上所示对 urls.py 进行更改后,它应该可以正常工作。
【讨论】:
这不适合生产。该解决方法仅用于本地开发!以上是关于收集静态文件会抛出 ImproperlyConfigured的主要内容,如果未能解决你的问题,请参考以下文章
为啥 InputStreamReader 从 jar 读取时会抛出 NPE?