首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Django从url保存图片并与ImageField连接

Django从url保存图片并与ImageField连接
EN

Stack Overflow用户
提问于 2013-05-05 11:55:16
回答 4查看 34.2K关注 0票数 33

我在models.py中有

代码语言:javascript
复制
class Item(models.Model):
    image_file = models.ImageField(upload_to='images')
    image_url = models.URLField()

我希望django自动下载和本地保存图像从image_url和连接它与image_file

应该如何行动:

  1. I Paste https://docs.djangoproject.com/s/img/site/hdr_logo.gif in image_url field In admin
  2. 单击"save"
  3. In templates write <img src="{{ item.image_file.url }}">。它显示来自我的服务器的图像,而不是djangoproject.com

我尝试过的东西:

我已经覆盖了Item类的save方法。我通过urllib在本地保存了图像,但我坚持将保存的图像与image_file字段连接起来

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-05-05 17:24:24

代码语言:javascript
复制
from django.core.files import File
import os

class Item(models.Model):
    image_file = models.ImageField(upload_to='images')
    image_url = models.URLField()

...

def get_remote_image(self):
    if self.image_url and not self.image_file:
        result = urllib.urlretrieve(self.image_url)
        self.image_file.save(
                os.path.basename(self.image_url),
                File(open(result[0]))
                )
        self.save()

您可以覆盖默认的save()方法以自动调用get_remote_image()。

请参阅:https://docs.djangoproject.com/en/dev/topics/db/models/#overriding-model-methods

票数 46
EN

Stack Overflow用户

发布于 2018-10-08 00:01:27

代码语言:javascript
复制
from django.db import models
from django.core.files import File
from urllib.request import urlopen
from tempfile import NamedTemporaryFile

class Item(models.Model):
    image_file = models.ImageField(upload_to='images')
    image_url = models.URLField()

...

def get_remote_image(self):
    if self.image_url and not self.image_file:
        img_temp = NamedTemporaryFile(delete=True)
        img_temp.write(urlopen(self.image_url).read())
        img_temp.flush()
        self.image_file.save(f"image_{self.pk}", File(img_temp))
    self.save()

该解决方案避免了在url处理期间接收到的任何utf-8错误。

它只能与python 3.6+一起使用,因为f字符串。

请查看此链接:https://twigstechtips.blogspot.com/2012/04/django-programmatically-saving-image.html

票数 13
EN

Stack Overflow用户

发布于 2017-12-28 07:17:06

对于python3

代码语言:javascript
复制
from django.core.files import File
from urllib import request
import os

class Item(models.Model):
    image_file = models.ImageField(upload_to='images')
    image_url = models.URLField()

...

def get_remote_image(self):
    if self.image_url and not self.image_file:
        result = request.urlretrieve(self.image_url)
        self.image_file.save(
                os.path.basename(self.image_url),
                File(open(result[0], 'rb'))
                )
        self.save()

从这里:http://stackoverflow.com/questions/17960942/attributeerror-module-object-has-no-attribute-urlretrieve

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16381241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档