Whitenoise 似乎无法帮助图像在 heroku 中显示

Whitenoise doesn't seem to help images to show up in heroku

我收到图片的 404 错误。

https://example.herokuapp.com/images/IMG_2060.JPG 404 (Not Found)

这是我的目录树

directory1
    |
    |-- manage.py
    |
    |-- build/
    |     |
    |     |--static/
    |     .
    |     .
    |
    |-- static/
    .     |
    .     |--images/
    .     .
    .     .

我想看的图片在directory1/static/images/.

设置

INSTALLED_APPS = [
    'whitenoise.runserver_nostatic',
     ...
]

MIDDLEWARE = [
    'whitenoise.middleware.WhiteNoiseMiddleware',
    ....
]


STATIC_URL = '/static/'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'build/static')
]

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

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

MEDIA_URL = '/images/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'static/images')

whitenoise 版本是 5.2.0。我将此应用程序部署到 heroku。一切正常,除了图像。我错过了什么吗?

提前致谢! :)

Django 的静态文件处理可能有点混乱。

STATIC_ROOT 应该是一个空目录,Django 将您的静态文件 复制到 以备服务。这是由 Heroku 自动 运行 collectstatic 命令完成的。

您希望它从复制文件的目录应该在STATICFILES_DIRS.

中列出

因此,如果您像这样更改设置,它应该会起作用:

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'build/static'),
    os.path.join(BASE_DIR, 'static'),
]

STATIC_ROOT = os.path.join(BASE_DIR, 'static_root')