Django: добавьте изображение в ImageField от URL изображения

Строка не переводима. Это говорит редактору Eclipse не отмечать строку, как не снабжено. Это важно для многоязычных приложений.

82
задан 8 September 2009 в 14:54
поделиться

3 ответа


from myapp.models import Photo
import urllib
from urlparse import urlparse
from django.core.files import File

img_url = 'http://www.site.com/image.jpg'

photo = Photo()    # set any other fields, but don't commit to DB (ie. don't save())
name = urlparse(img_url).path.split('/')[-1]
content = urllib.urlretrieve(img_url)

# See also: http://docs.djangoproject.com/en/dev/ref/files/file/
photo.image.save(name, File(open(content[0])), save=True)

31
ответ дан 24 November 2019 в 09:16
поделиться

ImageField - это просто строка, путь относительно вашего MEDIA_ROOT настройка. Просто сохраните файл (вы можете использовать PIL, чтобы проверить, что это изображение) и заполните поле его именем файла.

Таким образом, он отличается от вашего кода тем, что вам нужно сохранить вывод URL-адреса . urlopen в файл (в папке с медиафайлами), определите путь, сохраните его в своей модели.

5
ответ дан 24 November 2019 в 09:16
поделиться

Я просто Создан http://www.djangosnippets.org/snippets/1890/ для этой же проблемы. Код аналогичен уцинкому «Ответу выше, за исключением того, что он использует URLLIB2.URLOPEN, потому что Urllib.urlretRieve не выполняет никакой обработке ошибок по умолчанию, поэтому легко получить содержимое страницы 404/500 вместо того, что вам нужно. Вы можете создавать функцию обратного вызова и пользовательский подкласс URLOPENER, но мне было проще просто создать свой собственный файл TEMP:

from django.core.files import File
from django.core.files.temp import NamedTemporaryFile

img_temp = NamedTemporaryFile(delete=True)
img_temp.write(urllib2.urlopen(url).read())
img_temp.flush()

im.file.save(img_filename, File(img_temp))
95
ответ дан 24 November 2019 в 09:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: