当前位置: 首页 > 面试题库 >

Django:通过图片网址在ImageField中添加图片

宦翔飞
2023-03-14
问题内容

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

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/。该代码与上面的pithyless答案类似,不同之处在于它使用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))


 类似资料:
  • 本文向大家介绍Django1.9 加载通过ImageField上传的图片方法,包括了Django1.9 加载通过ImageField上传的图片方法的使用技巧和注意事项,需要的朋友参考一下 这里假设你是通过models的ImageField上传图片,并期望在前台img标签中能显示。能否访问图片关键在于,是否能通过正确的路径访问。 在models.py中有image如下 在显示页面中如show.htm

  • 问题内容: 我正在为Android编写一个小相框应用程序,它使用opengl作为部分UI。这部分需要从flickr获取图像并将其加载到纹理中。我下面的代码大多数时候都可以使用,但是在从连接获取输入流和对流进行位图解码的位之间,它具有Thread.sleep()缺点: 我如何使用sleep()方法来支持具有逻辑意义的内容? 我正在不在模拟器中的三星银河标签上进行测试 问题答案: 这似乎不太理想,但是

  • 编辑文档时,还可以插入图片。每个主题下可以添加多张图片,支持多种插入方式,以及方便的编辑功能。 如何插入 1、使用快捷键「Alt + Enter」呼出菜单; 2、鼠标悬停在主题的圆点上,在出现的菜单中选择添加图片; 3、直接将电脑中的图片,拖到某一个主题下; 4、直接从剪切板粘贴图片,使用快捷键「Ctrl + V」。 注:高级版用户才可以使用图片功能,支持 jpg、png、gif 等格式的图片,单

  • 问题内容: 简短的问题:我需要使用Wicket将从数据库中提取的动态图像转换为URL,而无需将组件添加到显示页面(例如,使用NonCachingImage)。 完美的解决方案(我已在其他Framework中实现)只是创建一个页面,该页面将图像ID作为url参数并将图像呈现到响应流。不幸的是,Wicket的Page类扩展了MarkupContainer,它围绕MarkupStreams展开。Mark

  • 6.9.1.添加图片 先给界面加上背景图片。在Android中,多数图片都是放在一个名为drawable的资源目录中。可以留意,我们有三个这样的目录: /res/drawable-hdpi 用于较高分辨率的设备 /res/drawable-mdpi 用于中等分辨率的设备 /res/drawable-ldpi 用于较低分辨率的设备 我们新建另一个目录,名为/res/drawable。右键单击res目

  • 问题内容: 我正在使用 来在我的模型上存储个人资料图片。 如果未定义图像,如何设置它以返回默认图像? 问题答案: 我还没有尝试过,但是我比较确定你可以将其设置为默认值。