Django - manage.py collectstatic 保存到错误的文件夹
Django - manage.py collectstatic saving to the wrong folder
更新: 看起来这是由 django-heroku 包引起的,特别是继承的 whitenoise 包,在文档中说你应该把
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
在设置文件的末尾,我从未这样做过,但它仍然强制 root 是 'staticfiles' 文件夹而不是资产文件夹
原文Post:
当我 运行 python manage.py collectstatic 时,它会保存到名为 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 文件夹(来自第 3 方包的静态资产)、一个管理文件夹和一个 staticfiles.json
settings.py
的中间件部分
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
# some more middleware
'tz_detect.middleware.TimezoneMiddleware',
]
似乎无法使用 django_heroku
更改 STATIC_ROOT
的名称,而不 monkey patching 软件包。
行django_heroku.settings(locals())
获取所有局部变量(即STATIC_ROOT
)并将它们传递到在django_heroku/core.py
处找到的settings
函数。
如果你看一下第 89 行:
config['STATIC_ROOT'] = os.path.join(config['BASE_DIR'], 'staticfiles')
您会看到无论您为 STATIC_ROOT
设置什么值,程序包都会用 staticfiles
覆盖它。
Note that the following may have unintended consequences, and you shouldn't do them.
这里有 2 个 猴子补丁 解决方案:
- 调用
django_heroku.settings(locals())
后更改 STATIC_ROOT
的值:
STATIC_ROOT = os.path.join(BASE_DIR, 'assets')
- 将
django_heroku/core.py line 89:
修改为以下内容:
if 'STATIC_ROOT' not in config:
config['STATIC_ROOT'] = os.path.join(config['BASE_DIR'], 'staticfiles')
这将防止 djano_heroku
覆盖 STATIC_ROOT
如果您已经定义了它。
同样,我不建议这样做,因为 可能 Heroku 强制您使用名称 staticfiles
的一个很好的理由,这可能会导致您的服务器破坏,或者更糟的是,您的服务器的某些部分可能会悄无声息地失败(这意味着调试将是一场噩梦)。
更新: 看起来这是由 django-heroku 包引起的,特别是继承的 whitenoise 包,在文档中说你应该把
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
在设置文件的末尾,我从未这样做过,但它仍然强制 root 是 'staticfiles' 文件夹而不是资产文件夹
原文Post:
当我 运行 python manage.py collectstatic 时,它会保存到名为 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 文件夹(来自第 3 方包的静态资产)、一个管理文件夹和一个 staticfiles.json
settings.py
的中间件部分MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
# some more middleware
'tz_detect.middleware.TimezoneMiddleware',
]
似乎无法使用 django_heroku
更改 STATIC_ROOT
的名称,而不 monkey patching 软件包。
行django_heroku.settings(locals())
获取所有局部变量(即STATIC_ROOT
)并将它们传递到在django_heroku/core.py
处找到的settings
函数。
如果你看一下第 89 行:
config['STATIC_ROOT'] = os.path.join(config['BASE_DIR'], 'staticfiles')
您会看到无论您为 STATIC_ROOT
设置什么值,程序包都会用 staticfiles
覆盖它。
Note that the following may have unintended consequences, and you shouldn't do them.
这里有 2 个 猴子补丁 解决方案:
- 调用
django_heroku.settings(locals())
后更改STATIC_ROOT
的值:
STATIC_ROOT = os.path.join(BASE_DIR, 'assets')
- 将
django_heroku/core.py line 89:
修改为以下内容:
if 'STATIC_ROOT' not in config:
config['STATIC_ROOT'] = os.path.join(config['BASE_DIR'], 'staticfiles')
这将防止 djano_heroku
覆盖 STATIC_ROOT
如果您已经定义了它。
同样,我不建议这样做,因为 可能 Heroku 强制您使用名称 staticfiles
的一个很好的理由,这可能会导致您的服务器破坏,或者更糟的是,您的服务器的某些部分可能会悄无声息地失败(这意味着调试将是一场噩梦)。