Django:ImageField需要文件路径还是实际图片对象?

2 投票
1 回答
3774 浏览
提问于 2025-04-18 14:21

运行环境: Windows 7, Python 3.3, Django 1.6

我对如何在Django数据库中将图片存储为表的一部分感到困惑。Django里有一个叫做 ImageField 的字段,具体内容可以查看文档

问题:

在创建记录时,我应该给ImageField传什么?是文件路径字符串?还是图片的URL?或者是图片本身的字节表示?或者有没有什么方法可以先把图片加载到Django中,然后只传递一个对这个图片对象的引用(或指针)?

文档中说:“默认情况下,ImageField实例在你的数据库中创建为varchar(100)列。”这让我觉得它需要一个文件路径,因为它在要求一个字符串。

文档还提到它“需要Pillow库。”我已经下载了这个库,但文档没有说明如何使用Pillow来处理这个问题。

背景:我正在通过Django构建一个REST API,用于发送和接收Selenium测试的日志文件,并将它们存储在SQL数据库中。每个日志文件都有一个截图,因此需要一个ImageField。我几天前才开始使用Django。

1 个回答

4

通过imagefield和基于imagefield的表单,你可以把图片上传到你的MEDIA_ROOT文件夹里。

Imagefield会保存图片的路径。你可以查看Django文档中的“media”部分,它会告诉你如何存储用户上传的图片。

Imagefield还定义了一些图片的基本属性,比如宽度和高度。

在你的settings.py文件中,你需要设置:

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

这段设置表示我想把上传的文件存储在yourproject/media文件夹里,并且我希望在网址www.yoursite.com/media/path_to_image/image.png上显示这些文件。

接着,你可以定义一个包含imagefield的类。

class YourClass(models.Model):
    description = models.CharField(max_length=300, unique=True)
    picture = models.ImageField(upload_to='myimages')

这样,图片就会存储在yourproject/media/myimages文件夹里,并且可以通过网址www.yoursite.com/media/myimages/image.png访问。

要创建一个新的实例:

 from django.core.files import File
 from idontknow import YourClass

 yournewclass = YourClass(description='abc')

 yournewclass.picture.save('name.png',  File(open('path_to_pic/image.png', 'r'))

撰写回答