Django-manage.py静态保存到错误的文件夹
更新:看起来这是由django heroku软件包,特别是继承的whitenoise软件包引起的,在文档中,您应该将Django-manage.py静态保存到错误的文件夹,django,django-staticfiles,django-settings,django-static,Django,Django Staticfiles,Django Settings,Django Static,更新:看起来这是由django heroku软件包,特别是继承的whitenoise软件包引起的,在文档中,您应该将 STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') 在设置文件的末尾,我从未这样做过,但它仍然强制根目录为“staticfiles”文件夹,而不是资产文件夹 原创帖子: 当我运行python manage.py collectstatic时,它会保存到名为staticfiles的文件夹中 我一定做了些什么来实现这一点,但我搜索
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
在设置文件的末尾,我从未这样做过,但它仍然强制根目录为“staticfiles”文件夹,而不是资产文件夹
原创帖子:
当我运行python manage.py collectstatic时,它会保存到名为staticfiles的文件夹中
我一定做了些什么来实现这一点,但我搜索了staticfiles,除了“django.contrib.staticfiles”之外,没有找到其他引用
这是我的settings.py:
INSTALLED_APPS = [
#some apps
'django.contrib.staticfiles',
#some more apps
'tz_detect',
]
# some more code
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
VENV_PATH = os.path.dirname(BASE_DIR)
STATIC_ROOT = os.path.join(BASE_DIR, 'assets')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(VENV_PATH, 'media_root')
预期的结果是,当python manage.py collectstatic运行时,将创建一个资产文件夹,但这永远不会发生
除了静态文件夹中的文件外,staticfiles文件夹还包含一个tz_detect文件夹(来自第三方软件包中的静态资产)、一个admin文件夹和一个staticfiles.json
settings.py的中间件部分
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
# some more middleware
'tz_detect.middleware.TimezoneMiddleware',
]
使用
django\u heroku
更改STATIC\u ROOT
的名称似乎是不可能的,除非对包进行猴子补丁
行django\u heroku.settings(locals())
获取所有局部变量(即STATIC\u ROOT
)并将它们传递到django\u heroku/core.py
中的settings
函数中
如果您查看第89行:
config['STATIC_ROOT'] = os.path.join(config['BASE_DIR'], 'staticfiles')
您将看到,无论您为STATIC\u ROOT
设置了什么值,软件包都将使用staticfiles
覆盖它
注意以下情况可能会产生意外后果,您不应该这样做
以下是2个猴子补丁解决方案:
- 调用
后,更改django\u heroku.settings(locals())
的值:STATIC\u ROOT
- 将django_heroku/core.py第89行修改为以下内容:
djano\u heroku
,这将阻止它重写STATIC\u ROOT
同样,我不建议这样做,因为Heroku可能有一个很好的理由强迫您使用名称
staticfiles
,这可能会导致您的服务器崩溃,或者更糟糕的是,您的服务器的某些部分可能会无声地失败(这意味着调试将是一场噩梦)。您能提供一个指向tz\u detect
包的链接吗?当然,但我认为白噪音方案才是问题所在。这是tz_detect包裹谢谢,我正在调查此事。你能添加一个显示你的中间件
的更新吗?显示中间件变更的更新问题我运行了grep-nr'staticfiles'path/to/tz detect
和一些其他组合,但没有发现任何内容,因此tz detect
与问题无关。话虽如此,我认为白噪声可能是问题的根源,但我似乎无法重现您的问题,因此我认为您的问题中没有包含一些重要的内容。是否所有第三方应用程序/中间件都包含在已安装的应用程序和中间件中(不包括默认软件包)?
STATIC_ROOT = os.path.join(BASE_DIR, 'assets')
if 'STATIC_ROOT' not in config:
config['STATIC_ROOT'] = os.path.join(config['BASE_DIR'], 'staticfiles')