2013-05-05 18 views
14

mam w models.py:Django zapisać obraz z URL i połączyć z ImageField

class Item(models.Model): 
    image_file = models.ImageField(upload_to='images') 
    image_url = models.URLField() 

Chcę django automatycznie pobrać i lokalnie zapisywać obraz z image_url i "połączyć" się z image_file

Jak powinno akt:

  1. wkleić https://docs.djangoproject.com/s/img/site/hdr_logo.gif do image_url pole w administratorze
  2. Kliknij "zapisz"
  3. W szablonach napisz <img src="{{ item.image_file.url }}">. To pokazuje obraz z mojego serwera, a nie djangoproject.com

Co próbowałem:

Mam nadpisane save metodę Item klasie. Uratowałem obraz lokalnie poprzez urllib, ale siedzę na podłączeniu zapisany obraz z image_file dziedzinie

Odpowiedz

32
from django.core.files import File 
import os 

class Item(models.Model): 
    image_file = models.ImageField(upload_to='images') 
    image_url = models.URLField() 

... 

def get_remote_image(self): 
    if self.image_url and not self.image_file: 
     result = urllib.urlretrieve(self.image_url) 
     self.image_file.save(
       os.path.basename(self.image_url), 
       File(open(result[0])) 
       ) 
     self.save() 

można zastąpić domyślną metodą zapisu(), aby automatycznie wywołać get_remote_image().

Patrz: https://docs.djangoproject.com/en/dev/topics/db/models/#overriding-model-methods

+0

jaki sposób ustawić nazwę pliku obrazka? – User

+2

Aktualizacja Python3: http://stackoverflow.com/questions/17960942/attributeerror-module-object-has-no-attribute-urlretrieve – 43Tesseracts

0

Dla python3

from django.core.files import File 
from urllib import request 
import os 

class Item(models.Model): 
    image_file = models.ImageField(upload_to='images') 
    image_url = models.URLField() 

... 

def get_remote_image(self): 
    if self.image_url and not self.image_file: 
     result = request.urlretrieve(self.image_url) 
     self.image_file.save(
       os.path.basename(self.image_url), 
       File(open(result[0])) 
       ) 
     self.save() 

stąd: http://stackoverflow.com/questions/17960942/attributeerror-module-object-has-no-attribute-urlretrieve

Powiązane problemy