好了,我已经尝试了几乎所有的方法,但我不能让它工作。
关联起来
我已经用6种不同的方式写了这段代码。
我遇到的问题是我正在编写的所有代码的结果如下:(1) Django将生成第二个文件,(2)重命名新文件,在文件名的末尾添加一个_,然后(3)不传输任何数据,基本上将其保留为一个空的重命名文件。'upload_to‘路径中剩下的是两个文件,一个是实际的图像,另一个是图像的名称,但是是空的,当然,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
...but当然不起作用。
是的,我已经在这里讨论了其他问题,比如this one以及File上的django文档
更新在进一步测试后,它只有在Windows Server上的Apache下运行时才会执行此行为。在XP的“runserver”下运行时,它不会执行此行为。
我被难住了。
下面是在XP上成功运行的代码...
f = open(thumb_path, 'r')
model.thumbnail = File(f)
model.save()
发布于 2009-08-21 01:32:51
我有一些代码可以从web上获取图像并将其存储在模型中。重要的部分是:
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()
发布于 2012-10-16 23:11:29
如果模型尚未创建,则非常简单:
在第一个中,将您的图像文件复制到上传路径(假设在下面的代码片段中为=‘/’)。
Second,使用如下所示:
class Layout(models.Model):
image = models.ImageField('img', upload_to='path/')
layout = Layout()
layout.image = "path/image.png"
layout.save()
在django 1.4中测试和工作,它可能也适用于现有的模型。
发布于 2010-07-24 09:37:21
只是一点小小的评论。tvon answer可以工作,但是,如果你在windows上工作,你可能想用'rb'
open()
这个文件。如下所示:
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()
否则,您的文件将在第一个0x1A
字节处被截断。
https://stackoverflow.com/questions/1308386
复制相似问题