好吧,我几乎什么都试过了,但我不能让它工作
- 我有一个Django模型,上面有一个ImageField
- 我有通过HTTP下载图像的代码(经过测试并有效)
- 图像直接保存到“上载到”文件夹中(上载到是在ImageField上设置的)
- 我需要做的就是将已经存在的图像文件路径与ImageField关联起来
我已经用6种不同的方式编写了这段代码
我遇到的问题是,我正在编写的所有代码都会导致以下行为:
(1) Django将生成第二个文件,(2)重命名新文件,在文件名末尾添加一个uu,然后(3)不传输任何数据,基本上保留一个空的重新命名文件。“upload_to”路径中剩下2个文件,一个是实际图像,另一个是图像名称,但为空,当然,ImageField路径设置为Django尝试创建的空文件
如果不清楚,我将尝试说明:
##图像生成代码运行。。。。
/上传
生成的_image.jpg 4kb
##尝试设置ImageField路径。。。
/上传
生成的_image.jpg 4kb
生成的\u图像\ug.jpg 0kb
ImageField.Path=/Upload/generated\u image\uu.jpg
如何在没有Django尝试重新存储文件的情况下执行此操作?我真正想要的是这样的东西
model.ImageField.path=生成的图像路径
…但那当然不行
是的,我已经看过了这里的其他问题,比如这个问题,还有django文件
更新
经过进一步测试后,它仅在Windows服务器上在Apache下运行时才执行此行为。在XP上的“runserver”下运行时,它不会执行此行为
我被难住了
下面是在XP上成功运行的代码
f=open(拇指路径'r')
model.缩略图=文件(f)
model.save()
我有一些代码可以从web上获取图像并将其存储在模型中。重要的是:
从django.core.files导入文件#您需要这个
导入URL库
#以下内容实际上存在于我的模型的一个方法中
result=urllib.urlretrieve(image_url)#image_url是指向图像的url
#self.photo是ImageField
self.photo.save(
os.path.basename(self.url),
文件(打开(结果[0],'rb'))
)
self.save()
这有点混乱,因为它脱离了我的模型,有点脱离了上下文,但重要的部分是:
- 从web中提取的图像不是存储在upload_to文件夹中,而是由urllib.urlretrieve()存储为tempfile,然后丢弃
- save()方法采用文件名(os.path.basename位)和django.core.files.File对象
如果您有问题或需要澄清,请告诉我
编辑:为清晰起见,以下是模型(减去所有必需的导入语句):
类缓存图像(models.Model):
url=models.CharField(最大长度=255,唯一性=True)
photo=models.ImageField(上传到=photo\u路径,空白=True)
def缓存(自):
“”“如果我们有URL,则在本地存储图像”“”
如果self.url而不是self.photo:
结果=urllib.urlretrieve(self.url)
self.photo.save(
os.path.basename(self.url),
文件(打开(结果[0],'rb'))
)
self.save()