图像(媒体)未显示在 django-heroku 服务器上

Irt*_*ain 7 python django heroku

当我上传图像文件成功上传时,我已经在 Heroku 服务器上上传了我的站点 Django 应用程序,并且根据设置的图像路径也可以正确获取,但是图像没有显示它给错误媒体文件未在服务器中找到这是设置媒体设置

    MEDIA_URL = '/media/'
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
Run Code Online (Sandbox Code Playgroud)

这是在 url.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include('UserView.urls')),
    path('caterer/',include('CaterView.urls')),
]
# if settings.MediaAllow:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Run Code Online (Sandbox Code Playgroud)

这是models.py

class TypeofFood(models.Model):
    tyf_id = models.AutoField(primary_key=True,auto_created=True)
    tyf_value = models.CharField(max_length=256)
    tyf_image = models.ImageField(upload_to="typeoffood/", null=True, blank=True,default='default.jfif')
Run Code Online (Sandbox Code Playgroud)

在模板中它像这样获取图像

<center><img src="{{i.tyf_image.url}}" class="img-responsive" style="height: 200px; width: 200px; border-radius:50%" alt="Image of Caterers"></center>
Run Code Online (Sandbox Code Playgroud)

小智 7

heroku 免费存储不允许媒体文件存储,这就是为什么您的媒体文件在上传后将被删除的原因

因为它就像测试目的,如果你想在heroku上上传和存储媒体文件,你可以使用第三方 whitenoise

转到链接并了解如何使用whitenoise在heroku 上上传媒体文件,您也可以查看此链接

快乐编码


小智 6

为了让 heroku 提供静态文件,您还需要添加 whitenoise 包。安装它并添加必要的配置。

MIDDLEWARE_CLASSES = (
    # Simplified static file serving.
    # https://warehouse.python.org/project/whitenoise/
    'whitenoise.middleware.WhiteNoiseMiddleware',
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)

STATIC_ROOT = os.path.join(BASE_DIR, "your_static_folder")

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

MEDIA_URL = "/media/"

MEDIA_ROOT = os.path.join(BASE_DIR, "your_media_folder")
Run Code Online (Sandbox Code Playgroud)