繁体   English   中英

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

[英]Images(Media) not displaying on django-heroku server

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

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

这是在 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)

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

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

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

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

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

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

快乐编码

为了让 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")

1-确保 django.contrib.staticfiles 包含在您的 INSTALLED_APPS 中。

2-在您的设置文件中,定义 STATIC_URL,例如:

STATIC_URL = '/static/'

3-在您的模板中,使用静态模板标记使用配置的 STATICFILES_STORAGE 为给定的相对路径构建 URL:

{% load static %}
<img src="{% static 'my_app/example.jpg' %}" alt="My image">

4-将您的静态文件存储在您的应用程序中名为 static 的文件夹中。 例如:my_app/static/my_app/example.jpg。

在你的 html 中,你必须像这样提供你的图像:

{% load static %}
<img src="{% static "images/hi.jpg" %}" alt="Hi!">  

html 中的“image.url”格式不适用于 staticfiles/Heroku
我在 Heroku 上遇到了类似的问题,并使用下面的这些链接解决了我的问题。

Here is a complete guide for serving images on Heroku: 

https://github.com/codingforentrepreneurs/Guides/blob/master/all/Heroku_Django_Deployment_Guide.md

我也建议阅读参考资料。 这些将是参考:

1) http://whitenoise.evans.io/en/stable/django.html

2) https://docs.djangoproject.com/en/3.0/howto/static-files/

3) https://docs.djangoproject.com/en/3.0/ref/templates/builtins/#std:templatetag-static

来自文档

Heroku 文件系统是短暂的——这意味着在 dyno 运行时对文件系统的任何更改只会持续到该 dyno 关闭或重新启动。 每个 dyno 都使用最新部署的文件系统的干净副本启动。 这类似于有多少基于容器的系统(例如 Docker)在运行。

因此,您将需要使用第三方静态文件存储服务。

settings.py

DEBUG = True #I got the error beacuse i changed the DEBUG to False

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

import os
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static")

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, "media")


STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'

urls.py

urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('app_name.urls'))
]

if settings.DEBUG:
  urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
  urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM