好的,我已经尝试了几乎所有内容,但无法正常工作。
我遇到的问题是我正在编写的所有代码均导致以下行为:(1)Django将创建第二个文件,(2)重命名新文件,在文件末尾添加_名称,然后(3)不会在保留基本为空的重命名文件的情况下传输任何数据。在“ upload_to”路径中剩下的是2个文件,一个是实际图像,一个是图像名称,但为空,当然ImageField路径设置为Django尝试创建的空文件。 。
如果不清楚,我将尝试说明:
## 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
如何在不让Django尝试重新存储文件的情况下执行此操作?我真正想要的就是这种效果…
model.ImageField.path = generated_image_path
…但是那当然不行。
是的,我已经经历这里的其他问题,如走了这一个,以及对Django的DOC 文件
更新 经过进一步测试,仅当在Windows Server上的Apache下运行时,它才会执行此行为。在XP上的“ runserver”下运行时,它不会执行此行为。
我很沮丧
这是在XP上成功运行的代码…
f = open(thumb_path, 'r') model.thumbnail = File(f) model.save()
我有一些代码可以从网络上获取图像并将其存储在模型中。重要的位是:
from django.core.files import File # you need this somewhere import urllib # 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], 'rb')) ) self.save()
这有点令人困惑,因为它脱离了我的模型并且脱离了上下文,但是重要的部分是:
编辑:为清楚起见,这里是模型(减去任何必需的import语句):
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], 'rb')) ) self.save()