【发布时间】:2021-10-12 21:27:35
【问题描述】:
我有一个使用 Django Rest Framework 构建的简单 get api。 它从模型 Menu 中获取所有食物项。它由一个图像字段组成。 api 响应成功,我在图像字段中获得了图像 URL,但是当我单击该 url 时,图像未显示在新选项卡中。我做了一些项目,据我所知,它应该在新标签上显示图像。因此,图像不会显示在 Reactjs 中完成的前端中。 目前在 Heroku 中提供的后端。
url类似如下:
https://example.herokuapp.com/api/menus
本地的api响应如下:
当我同时点击 image 和 image_url 时,它显示如下:
我添加了 image_url 只是为了看看它是否有效,但它也不起作用。
我的模特:
class Menus(models.Model):
category = models.CharField(max_length=50,choices=CATEGORY,default='main courses')
food_name = models.CharField(max_length=100,blank=True, null=True)
image = models.ImageField(upload_to='media/pictures',null=True)
rating = models.FloatField(blank=True, null=True)
description = RichTextField(blank=True, null=True)
price = models.FloatField(blank=True, null=True)
我的序列化器:
class MenusSerializer(serializers.ModelSerializer):
image_url = serializers.SerializerMethodField('get_image_url')
def get_image_url(self, obj):
request = self.context.get('request')
image_url = obj.image.url
return request.build_absolute_uri(image_url)
class Meta:
model = Menus
fields = ['category','image', 'image_url','food_name',
'description','price','rating']
我的设置:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles/')
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
django_heroku.settings(locals())
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media/pictures')
我的项目网址:
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
注意:它不适用于本地和实时 api(在 heroku 上)。
更新:
文件夹如下所示:
【问题讨论】:
-
您是否手动检查了图像的目录。我猜它不应该是
media/media/pictures,但应该是media/pictures -
好的,那我的 media_url 应该是什么?空的?? @ShivendraPratapKushwaha
-
否...请手动检查您的图片上传位置。还要检查
settings.DEBUG。 -
my deub= true in settings.py....你下面的代码也不起作用.....
-
您是否检查过您的文件存储在哪里...??
标签: django api heroku django-rest-framework media