【问题标题】:Wrong path for ImageField in DjangoDjango中ImageField的错误路径
【发布时间】:2018-06-12 14:25:23
【问题描述】:

我有一个带有 ImageField 和更改上传路径功能的模型

class Images(models.Model):
    def upload_path(self, filename):
        return os.path.join(settings.TOOLS_IMAGE_UPLOADS, self.get_artworkID(),
                            filename)

    image = models.ImageField(upload_to=upload_path)
    artworkID = models.IntegerField(null=True, blank=True)

    def __str__(self):
        if self.title == "" or not self.title:
            return str(self.image)
        return self.title

    def get_artworkID(self):
        if self.artworkID:
            return str(self.artworkID)
        return 'temp'

TOOLS_IMAGE_UPLOADS的值为

PROJECT_DIR = os.path.dirname(os.path.abspath(__file__))
BASE_DIR = os.path.dirname(PROJECT_DIR)
MEDIA_NAME_FOLDER = 'media'
MEDIA_ROOT = os.path.join(BASE_DIR, MEDIA_NAME_FOLDER)
TOOLS_IMAGE_UPLOADS = os.path.join(MEDIA_ROOT, 'uploads', 'images')

问题是通过 Django admin 或 rest api 可视化 Image 对象时返回的 URL 错误

返回的路径: http://localhost:8000/media/webapp/artrights/media/uploads/images/temp/file.png

文件的真实路径: http://localhost:8000/media/uploads/images/temp/file.png

我做错了什么或者我只需要创建一个自定义函数来返回正确的路径?

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    upload_to 可调用对象应该是相对于MEDIA_ROOTreturn a path,因为它将被附加到它上面。

    我认为问题是TOOLS_IMAGE_UPLOADS 已经包含了MEDIA_ROOT

    所以这个函数真的应该返回MEDIA_ROOT之后的路径部分:

    def upload_path(self, filename):
        return os.path.join('uploads', 'images', self.get_artworkID(), filename)
    

    【讨论】:

    • 谢谢,我刚刚在TOOLS_IMAGE_UPLOAD 中插入了正确的路径,现在一切正常
    猜你喜欢
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    相关资源
    最近更新 更多