gpt4 book ai didi

python - Django:从图像 url 在 ImageField 中添加图像

转载 作者:IT老高 更新时间:2023-10-28 21:12:06 24 4
gpt4 key购买 nike

请原谅我丑陋的英语;-)

想象一下这个非常简单的模型:

class Photo(models.Model):
image = models.ImageField('Label', upload_to='path/')

我想从图像 URL 创建照片(即,不是在 django 管理站点中手动创建)。

我认为我需要做这样的事情:

from myapp.models import Photo
import urllib

img_url = 'http://www.site.com/image.jpg'
img = urllib.urlopen(img_url)
# Here I need to retrieve the image (as the same way that if I put it in an input from admin site)
photo = Photo.objects.create(image=image)

我希望我已经很好地解释了这个问题,如果没有告诉我。

谢谢你:)

编辑:

这可能有效,但我不知道如何将 content 转换为 django 文件:

from urlparse import urlparse
import urllib2
from django.core.files import File

photo = Photo()
img_url = 'http://i.ytimg.com/vi/GPpN5YUNDeI/default.jpg'
name = urlparse(img_url).path.split('/')[-1]
content = urllib2.urlopen(img_url).read()

# problem: content must be an instance of File
photo.image.save(name, content, save=True)

最佳答案

我刚刚创建了 http://www.djangosnippets.org/snippets/1890/对于同样的问题。该代码类似于上面的简洁答案,除了它使用 urllib2.urlopen 因为 urllib.urlretrieve 默认情况下不执行任何错误处理,因此很容易获取 404/500 页面的内容而不是您需要的内容。您可以创建回调函数和自定义 URLOpener 子类,但我发现像这样创建自己的临时文件更容易:

from django.core.files import File
from django.core.files.temp import NamedTemporaryFile

img_temp = NamedTemporaryFile(delete=True)
img_temp.write(urllib2.urlopen(url).read())
img_temp.flush()

im.file.save(img_filename, File(img_temp))

关于python - Django:从图像 url 在 ImageField 中添加图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1393202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com