Я использую django-storages для сохранения изображений, загруженных на S3, и я хочу создать настраиваемое поле формы, которое будет отображать изображение при редактировании вместе с возможностью его изменения.
Проблема, с которой я сталкиваюсь, заключается в том, что значение пути, которое хранится в моей базе данных, не является полным путем к изображению, поскольку django-хранилища генерирует полный путь.
Settings.py:
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_STORAGE_BUCKET_NAME = 'myBucketName'
AWS_LOCATION = 'mySubBucketName'
models.py:
class MyModel(models.Model):
my_image = ImageField(upload_to='upload/path')
Пример доступа к полному URL:
>>> mymod = MyModel.objects.get(id=1)
>>> print mymod.my_image
upload/path/somefile.jpg
>>> print mymod.my_image.url
https://s3.amazonaws.com/myBucketName/mySubBucketName/upload/path/somefile.jpg
Я не вижу, как я могу получить доступ к mymod.my_image.url () из пользовательского виджета (где я буду отображать () что-то вроде этого:
class ImageViewWidget(forms.Widget):
markup = """
<img src="%(imagepath)"/>
<input type="file" name="%(name)s"/>
"""
def render(self, name, value, attrs=None):
output = self.markup % {
"name": name,
"imagepath": "<<<< MAGIC CODE GOES HERE >>>>"
}
return mark_safe(output)
Обновление:
Я ищуСУХОЙ подход к этой проблеме. Мои извинения за то, что не разъяснили это с самого начала