Установить изображение по умолчанию на модель из ведра s3
Для профилей пользователей у меня есть изображение по умолчанию на модели
image = models.ImageField(default='default.jpg', upload_to='profile_pics')
Теперь у меня есть это изображение в ведре s3. Как я могу сослаться на это изображение из ведра s3, а не локально
? Если я пытаюсь использовать прямой путь изображения на модели https://uploadfiles.s3.amazonaws.com/profile_pics/default.jpg или путь ковша 'uploadfiles/profile_pics/default.jpg, я получаю ошибку This backend doesn't support absolute paths
Я не уверен, как еще я мог бы сослаться на изображение У меня есть надлежащий доступ к buckets и загрузка работает правильно
Попробуйте сделать что-то вроде этого, чтобы создать абсолютный uri к изображению, остальное просто затем bucket policy stuff на S3.
from django.contrib.sites.models import Site
from urllib.parse import urljoin
from django.utils.encoding import iri_to_uri
def build_absolute_uri(location):
# type: (str) -> str
host = Site.objects.get_current().domain
protocol = "https" if settings.ENABLE_SSL else "http"
current_uri = "%s://%s" % (protocol, host)
location = urljoin(current_uri, location)
return iri_to_uri(location)
@celery_app.task()
def send_expense_record(id):
send_kwargs, ctx = get_email_context()
expense = Expense.objects.get(pk=id)
imagelink = build_absolute_uri(expense.image.url)
ctx["imagelink"] = imagelink
email = send_templated_mail(
template_name="property/expense",
recipient_list=settings.ADMINS,
context=ctx,
**send_kwargs,
)
return email