Я создал приложение для блога, используя Django с дополнительными функциями загрузки миниатюр сообщений. В разработке все работало отлично, однако, когда я перешел в производство и начал сохранять и обслуживать изображения с помощью DigitalOcean Spaces, изображения, похоже, не загружаются, и я получаю ошибку сервера. Может кто-нибудь сказать мне, как я могу адаптировать мой код, чтобы сделать эту работу? Это моя текущая конфигурация:
models.py
def image_path(instance, filename):
basefilename, file_extension = os.path.splitext(filename)
chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'
randomstr = ''.join((random.choice(chars)) for x in range(10))
#return 'listings/{listing}/{randomstring}{ext}'.format(listing = instance.slug, randomstring = randomstr, ext = file_extension)
return 'posts/{randomstring}.jpg'.format(randomstring = randomstr)
class Post(models.Model):
title = models.CharField(_('title'), max_length=50)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
slug = models.SlugField(_('slug'), unique=True, null=True, blank=True)
body = models.TextField(_('body'))
image = models.ImageField(_('image'), blank=True, upload_to=image_path, validators=[validate_image])
date_created = models.DateTimeField(_('date created'), auto_now_add=True)
date_modified = models.DateTimeField(_('date modified'), auto_now=True)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post-detail', kwargs={'slug': self.slug})
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
if self.image:
img = Image.open(self.image.path)
if img.mode != 'RGB':
img = img.convert('RGB')
if img.width > 100:
ratio = img.width / img.height
height = 100 / ratio
output_size = (100, height)
img.thumbnail(output_size)
img = ImageOps.exif_transpose(img)
img.save(self.image.path, optimize=True, quality=90, format='JPEG')
Примечание: я добавил функцию image_path только для контекста, и я знаю, что это должна быть моя функция сохранения это должно измениться, я просто не знаю, как это сделать, сохранив ту же способность сохранения изображений.