好的,我几乎什么都试过了,就是不能用.

  • 我有一个上面有ImageField的Django模型
  • 我有通过HTTP下载图像的代码(经过测试,可以正常工作)
  • 图像直接保存到"upload_to"文件夹中(upload_to是在ImageField上设置的文件夹)
  • 我需要做的就是将已经存在的图像文件路径与ImageField关联起来

我已经用6种不同的方式写了这段代码.

我遇到的问题是,我正在编写的所有代码都会导致以下行为:

如果不清楚,我将try 说明:

## 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

我怎样才能不让Djangotry 重新存储文件呢?我真正想要的是这样的东西...

model.ImageField.path = generated_image_path

...但这当然行不通.

是的,我已经看过其他问题了,比如this one,还有File的Djangodoctor

UPDATE

我被难住了.

下面是在XP上成功运行的代码...

f = open(thumb_path, 'r')
model.thumbnail = File(f)
model.save()

推荐答案

我有一些代码可以从网络上获取图像并将其存储在模型中.重要的部分包括:

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()

这有点令人困惑,因为它脱离了我的模型,有点断章取义,但重要的是:

  • 从Web中提取的图像not存储在Upload_to文件夹中,而不是由urllib.urlRetrieve()存储为临时文件,稍后将其丢弃.
  • 图像字段.save()方法接受一个文件名(os.path.basename位)和一个django.果心文件夹.文件对象.

如果您有问题或需要澄清,请告诉我.

编辑:为了清晰起见,以下是模型(减go 所有必需的导入语句):

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()

Python相关问答推荐

在Python中,如何才能/应该使用decorator 来实现函数多态性?

使用Python OpenCV的文本检测分割

使用Python Great Expectations和python-oracledb

customtkinter中使用的这个小部件的名称是什么

从管道将Python应用程序部署到Azure Web应用程序,不包括需求包

将DF中的名称与另一DF拆分并匹配并返回匹配的公司

Pytest两个具有无限循环和await命令的Deliverc函数

使用miniconda创建环境的问题

如何标记Spacy中不包含特定符号的单词?

聚合具有重复元素的Python字典列表,并添加具有重复元素数量的新键

Python—从np.array中 Select 复杂的列子集

所有列的滚动标准差,忽略NaN

Pandas Loc Select 到NaN和值列表

改进大型数据集的框架性能

字符串合并语法在哪里记录

在matplotlib中删除子图之间的间隙_mosaic

在Python中使用if else或使用regex将二进制数据如111转换为001""

Matplotlib中的字体权重

如何防止Pandas将索引标为周期?

Cython无法识别Numpy类型