SORU
8 EYLÜL 2009, Salı


Django: resim url bir ImageField Resim Ekle

lütfen çirkin benim İngilizce için özür dilerim ;-)

Bu çok basit bir model düşünün :

class Photo(models.Model):
    image = models.ImageField('Label', upload_to='path/')

Resim bir URL (django admin site eliyle değil yani) bir Fotoğraf oluşturmak istiyorum.

Böyle bir şey yapmam gerektiğini düşünüyorum

from myapp.models import Photo
import urllib

img_url = 'http://www.site.com/image.jpg'
img = urllib.urlopen(img_url)
# Here I need to retrieve the image (as the same way that if I put it in an input from admin site)
photo = Photo.objects.create(image=image)

Peki sorunu açıkladı, değilse söyle olmam umarım.

Teşekkür ederim :)

Düzenleme :

Bu işe yarayabilir ama django bir Dosya için content dönüştürmek için nasıl bilmiyorum.

from urlparse import urlparse
import urllib2
from django.core.files import File

photo = Photo()
img_url = 'http://i.ytimg.com/vi/GPpN5YUNDeI/default.jpg'
name = urlparse(img_url).path.split('/')[-1]
content = urllib2.urlopen(img_url).read()

# problem: content must be an instance of File
photo.image.save(name, content, save=True)

CEVAP
26 Ocak 2010, Salı


Ben sadece bu aynı sorun için http://www.djangosnippets.org/snippets/1890/ yarattı. Kodu pithyless' urllib2 kullanması dışında.yukarıda cevap benzer urlopen çünkü urllib.urlretrieve kolay istediğini yerine 404/500 bir sayfanın içeriğini almak için varsayılan olarak herhangi bir hata işleme yapmaz. Geri arama fonksiyonu & özel URLOpener sınıfı oluşturabilirsiniz ama daha kolay buldum:

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))

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • jesiel santos

    jesiel santo

    15 Ocak 2009
  • Mr_BrettHooge

    Mr_BrettHoog

    3 Ocak 2011
  • stewmurray47

    stewmurray47

    1 Kasım 2006