Django-manage.py静态保存到错误的文件夹

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的文件夹中 我一定做了些什么来实现这一点,但我搜索

更新:看起来这是由django heroku软件包,特别是继承的whitenoise软件包引起的,在文档中,您应该将

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')