我是 Django 的初学者,这正是它的作用。我按照文档中的说明进行操作,但无论如何,也许出了什么问题?从管理页面我添加\设置产品并选择“图像”,然后当我保存它时创建缩略图并尝试保存在“/media/uploads/”中,但它创建另一个“媒体”文件夹当站点路径为“/media/uploads/img.png”时,图像存储在“/media/media/uploads/img.png”中。这是代码:/shop/settings.py:MEDIA_URL = '/media/'MEDIA_ROOT = os.path.join(BASE_DIR, 'media') # or even 'media/'/shop/urls.py:urlpatterns = [ ...] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)添加后,然后在我的产品模型中我这样做:/apps/store/models.py:class Product(models.Model): ... image = models.ImageField(upload_to='media/uploads/', blank=True, null=True) thumbnail = models.ImageField(upload_to='media/uploads/', blank=True, null=True) ... def save(self, *args, **kwargs): self.thumbnail = self.make_thumbnail(self.image) super().save(*args, **kwargs) @staticmethod def make_thumbnail(image, size=(512, 512)): if not image: return img = Image.open(image) if img.mode in ('RGBA',): # converting image to RGB if it's RGBA img.load() rgb_convert = Image.new('RGB', img.size, 0) rgb_convert.paste(img, mask=img.split()[3]) img = rgb_convert img.thumbnail(size) thumb_io = BytesIO() img.save(thumb_io, 'PNG', quality=80) thumb = File(thumb_io, name=image.name) return thumb我尝试将“upload_to”更改为“uploads/”,然后它以正确的方向存储文件,但现场路径也更改为“/uploads/img.png”,而它必须是“/media/uploads/img” .png'有什么问题吗?谢谢!
2 回答
牛魔王的故事
TA贡献1830条经验 获得超3个赞
参数upload_to=…
[Django-doc]是相对于MEDIA_ROOT
. 因此,如果您想将其存储在目录uploads
中的某个目录中media
,请使用以下命令上传:
class Product(models.Model): # … thumbnail = models.ImageField(upload_to='uploads/', blank=True, null=True)
然而,为了呈现URL,您需要使用.url
属性 [Django-doc],因此:
{% if p.thumbnail %} <img src="{{ p.thumbnail.url }}"> {% endif %}
这里有{% if p.thumbnail %}
必要检查NULL
/None
值。
繁星淼淼
TA贡献1775条经验 获得超11个赞
这是因为你写了“upload_to='media/uploads'”..从你的设置中django将创建媒体文件夹,并且由于你写了“media/uploads”,uploads位于媒体文件夹内,该文件夹位于设置中声明的主媒体内。所以就写
class Product(models.Model):
…
thumbnail = models.ImageField(upload_to='uploads/', blank=True, null=True)
添加回答
举报
0/150
提交
取消