Вот исходный код attach_file
от Django. Там четко написано - прикрепить файл из файловой системы . Это не работает с удаленными URL. И когда вы даете ему URL-адрес, он думает, что вы ссылаетесь на локальный файл, поэтому он экранирует все двойные косые черты в одиночные косые черты.
def attach_file(self, path, mimetype=None):
"""
Attach a file from the filesystem.
Set the mimetype to DEFAULT_ATTACHMENT_MIME_TYPE if it isn't specified
and cannot be guessed.
For a text/* mimetype (guessed or specified), decode the file's content
as UTF-8. If that fails, set the mimetype to
DEFAULT_ATTACHMENT_MIME_TYPE and don't decode the content.
"""
path = Path(path)
with path.open('rb') as file:
content = file.read()
self.attach(path.name, content, mimetype)
Django не предоставляет ничего встроенного для этого. Вам нужно будет написать что-то нестандартное в строках вышеприведенного кода, используя библиотеки типа request
или boto
. По сути, идея заключается в том, чтобы извлечь из удаленного URL-адреса сохранение как temp и затем использовать attach
.
Вот один пример того, как вы можете получить файл на лету:
from django.core.mail.message import attach
import requests
response = requests.get("http://yoururl/somefile.pdf")
email.attach('My file',response.read(),mimetype="application/pdf")