SORU
20 AĞUSTOS 2009, PERŞEMBE


Program aracılığıyla resim ImageField Django için tasarruf

Tamam, her şeyi yakın çalıştım ve bu iş için alınamıyor.

  • Bir ImageField ile Django bir model var
  • HTTP (test edilmiş ve çalışır) resim indirme kodu var
  • Resim doğrudan 'upload_to' klasörü (upload_to, ImageField üzerinde ayarlanmış bir varlık) . içine kaydedilir
  • Yapmam gereken tüm ImageField ile zaten varolan bir görüntü dosyası yolu ilişkilendirmek

Bu kod 6 farklı şekilde yazdım.

İçine koşuyorum bu sorun, aşağıdaki davranış oluşur yazdığım kod: (1) Django hale getirecek 2 dosya, (2) Yeniden Adlandır yeni dosya ekleme _ sonuna dosya adı, (3) transfer etmek değil, herhangi bir veri üzerinde bırakarak temelde boş bir yeniden adlandırılmış dosya. Ne kaldı 'upload_to' yolu 2 dosya, o görüntünün gerçek ve tek olan adıdır görüntü,ama boş, ve tabii ki ImageField yolu ayarlamak için boş dosya Django oluşturmak için çalışacağız.

Biraz karışık mı diye, göstermek için çalışacağım:

## Image generation code runs.... 
/Upload
     generated_image.jpg     4kb

## Attempt to set the ImageField path...
/Upload
     generated_image.jpg     4kb
     generated_image_.jpg    0kb

ImageField.Path = /Upload/generated_image_.jpg

Nasıl Django yeniden depolamak için denemek zorunda kalmadan bu dosyayı alabilir miyim? Aslında tek istediğim bu yönde bir şey

model.ImageField.path = generated_image_path

ama tabii bu da işe yaramıyor.

Ve evet, diğer soru ile this one yanı sıra django gibi oldum File doc

GÜNCELLEME Testlerden sonra, sadece Windows altında çalışan Apache Server bu davranış. Altında 'runserver' XP bu davranış çalıştırmak değil. çalışırken

Tıkandım.

Burada başarılı bir şekilde XP üzerinde çalışan kod...

f = open(thumb_path, 'r')
model.thumbnail = File(f)
model.save()

CEVAP
21 AĞUSTOS 2009, Cuma


Web'den bir resim getirir bazı kod var ve bir model olarak saklar. Önemli bit

from django.core.files import File  # you need this somewhere


# The following actually resides in a method of my model

result = urllib.urlretrieve(image_url) # image_url is a URL to an image

# self.photo is the ImageField
self.photo.save(
    os.path.basename(self.url),
    File(open(result[0]))
    )

self.save()

Benim model çıkardı ve bağlam dışı bir şey, çünkü biraz kafa karıştırıcı, ama önemli parçaları şunlardır:

  • Resmi web çektiğideğilupload_to klasöründe, urllib ile bir geçici dosya olarak yerine saklanır.() urlretrieve ve daha sonra atılır.
  • Bu Imagefield.() kayıt yöntemi bir dosya adı (os.yol.bit basename) ve django.çekirdek.dosyaları.Nesne dosyası.

Bana eğer bir sorunuz varsa ya da açıklanması gerekiyor.

Edit: sadelik adına, burada modeli (eksi gerekli import deyimleri):

class CachedImage(models.Model):
    url = models.CharField(max_length=255, unique=True)
    photo = models.ImageField(upload_to=photo_path, blank=True)

    def cache(self):
        """Store image locally if we have a URL"""

        if self.url and not self.photo:
            result = urllib.urlretrieve(self.url)
            self.photo.save(
                    os.path.basename(self.url),
                    File(open(result[0]))
                    )
            self.save()

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CMTelly

    CMTelly

    2 Mayıs 2007
  • MrChiCity3

    MrChiCity3

    14 NİSAN 2008
  • TastyTuts | Creative video tutorials by Gareth David

    TastyTuts |

    6 Temmuz 2011