好的,我已经尝试了几乎所有的东西,但我无法让它工作。
我已经用 6 种不同的方式编写了这段代码。
我遇到的问题是我正在编写的所有代码都会导致以下行为:(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
…但当然这不起作用。
是的,我已经在这里解决了其他问题,例如这个问题以及File上的 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()
这有点令人困惑,因为它已从我的模型中提取出来并且有点脱离上下文,但重要的部分是:
如果您有任何问题或需要澄清,请告诉我。
编辑:为了清楚起见,这里是模型(减去任何必需的导入语句):
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()