Django Rest应用程序没有正确使用媒体根来提供图像

时间:2016-05-08 21:52:00

标签: python django image django-rest-framework image-uploading

我有一个项目有3个应用程序,一个名为商店的商店模型,产品有产品模型,api是用于向客户提供Json结果的其余框架应用程序。我将settings.py中的媒体根设置为MEDIA_ROOT = '/photos/',并且上传适用于产品和商店模型。这里的主要问题是,由于某种原因,其余框架返回一个引用api应用程序而不是产品的URL或存储媒体根URL的应用程序。这是我的模特

class Product(models.Model):

def get_image_path(instance, filename):
    return '/Products/' + filename

picture = models.ImageField(width_field=None, max_length=100, blank =True, null =True)

存储

class Store(models.Model):


def __str__(self):
    return self.name


def get_image_path(instance, filename):
    return os.path.join('productphotos', 'stores', filename)

picture = models.ImageField(width_field=None, max_length=100, blank =True, null =True)

如何将mediaroot设置为项目目录,以便项目中的所有应用程序都将其引用为mediaroot而不是自己?

上传工作并将图片上传到项目根目录中的指示目录(找到manage.py),但其余框架认为它应该从api app获取媒体..什么是正确的方式这样做?这是截图:

上传到的路径 Successful upload path

json中返回的路径 Path returned by DRF

1 个答案:

答案 0 :(得分:5)

MEDIA_URL设置是浏览器中的URL路径。 MEDIA_ROOT设置是服务器上的根目录,应该是绝对路径。

MEDIA_URL = '/pictures/'

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MEDIA_ROOT = os.path.join(BASE_DIR, 'uploaded_pictures')

此外,如果您希望ProductStore图片进入不同的子目录,例如pictures/products/pictures/store/,则需要设置{{ 1}}关于模型字段的参数。例如

upload_to

修改:要在开发期间提供静态和媒体文件,请在urls.py

的末尾添加此文件。
picture = models.ImageField(upload_to='products/', ... )
相关问题