【问题标题】:Django rest framework api - image url is not returning properlyDjango rest framework api - 图像 url 没有正确返回
【发布时间】:2016-05-30 06:25:55
【问题描述】:

我在返回的图片 url 中遇到问题,这是不正确的。

我的返回图片网址是"http://127.0.0.1:8000/showimage/6/E%3A/workspace/tutorial_2/media/Capture1.PNG" 但我需要

"http://127.0.0.1:8000/media/Capture1.PNG"

当我点击image_url 然后在新的浏览器选项卡中打开图片 但目前它显示的错误: view.py

from showimage.models import ShowImage
from showimage.serializers import ShowImageSerializer
from rest_framework import generics

# Create your views here.

    class ShowImageList(generics.ListCreateAPIView):
        queryset = ShowImage.objects.all()
        serializer_class = ShowImageSerializer
        
    class ShowImageDetail(generics.RetrieveUpdateDestroyAPIView):
        queryset = ShowImage.objects.all()
        serializer_class = ShowImageSerializer

model.py

from __future__ import unicode_literals

from django.db import models
from django.conf import settings


# Create your models here.

class ShowImage(models.Model):
    image_name = models.CharField(max_length=255)
    image_url = models.ImageField(upload_to=settings.MEDIA)

serializer.py

from rest_framework import serializers
from showimage.models import ShowImage

class ShowImageSerializer (serializers.ModelSerializer):
    class Meta:
        model = ShowImage
        fields = ('id', 'image_name', 'image_url')

settings.py

MEDIA=os.path.join(BASE_DIR, "media")

urls.py

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^showimage/', include('showimage.urls')),
]

我是 python 和 django-rest-framework 的新手。 还请告诉我我们如何扩展模型或序列化类

【问题讨论】:

  • “扩展模型”是什么意思。你想达到什么目标?
  • 所有你的图片 url 看起来都非常奇怪和错误......你的错误图片中的那个(你应该包括作为文本顺便说一句)正试图链接到一个对每个人都无用的 E 驱动器参与该请求。然后你的其他人不应该关心它托管在哪个端口或域上。

标签: python django django-models django-views django-rest-framework


【解决方案1】:

你可能想在你的设置中试试这个:

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

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^showimage/', include('showimage.urls')),
]

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

在你的模型中:

class ShowImage(models.Model):
    image_name = models.CharField(max_length=255)
    image_url = models.ImageField(upload_to="") # or upload_to="images", which would result in your images being at "http://127.0.0.1:8000/media/images/Capture1.PNG"

【讨论】:

    【解决方案2】:

    最后,我在 @雷米 谢谢@Remi 但我做了一些其他更改,以便我详细说明解决方案并修复此问题。

    settings.py

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

    urls.py

    from django.conf.urls import url, include
    from django.contrib import admin
    from django.conf import settings
    from django.conf.urls.static import static
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^showimage/', include('showimage.urls')),
    ]
    
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    

    【讨论】:

      【解决方案3】:

      您的代码似乎正确,除了您在上传图片中通过 settings.MEDIA 的一件事。您不需要在上传中传递 settings.MEDIA。

      试试这个

      image_url = models.ImageField(upload_to='Dir_name')
      

      Dir_name 将在您运行脚本时创建。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-07
        • 1970-01-01
        • 2018-09-10
        • 1970-01-01
        • 2020-07-09
        • 2020-12-16
        • 1970-01-01
        相关资源
        最近更新 更多