我是Django的初学者,这正是它的用途。 我按照文档中的说明进行操作,但可能出了些问题?
从管理页面中,我添加/设置产品并选择“图像”,然后在保存时创建一个缩略图并尝试将其保存在“/media/uploads/”中,但实际上它创建了另一个“media”文件夹,并且图像存储在“/media/media/uploads/img.png”中,而网站上的路径是“/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)
添加完成后,在我的Product模型中,我做如下操作:
/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”。
可能哪里出了问题呢? 谢谢!