将 ImageField 添加到模型会导致 django 中的异常

Posted

技术标签:

【中文标题】将 ImageField 添加到模型会导致 django 中的异常【英文标题】:Adding ImageField to model causes exception in django 【发布时间】:2014-02-16 14:16:45 【问题描述】:

我已经创建了一个基本的 CMS,下一步是添加图片上传功能。我在我的 models.py 中添加了一些行,之后我的模型因为 UnicodeDecodeError 而没有验证:

线程中未处理的异常由 回溯(最近一次通话最后): 文件“C:\Python27\lib\site-packages\django\utils\autoreload.py”,第 93 行,在 w 说唱歌手 fn(*args, **kwargs) 文件“C:\Python27\lib\site-packages\django\core\management\commands\runserver. py",第 101 行,inner_run self.validate(display_num_errors=True) 文件“C:\Python27\lib\site-packages\django\core\management\base.py”,第 310 行, 有效 num_errors = get_validation_errors(s, app) 文件“C:\Python27\lib\site-packages\django\core\management\validation.py”,林 e 113,在 get_validation_errors 从 django.utils.image 导入图像 文件“C:\Python27\lib\site-packages\django\utils\image.py”,第 154 行,在 图像,_imaging,ImageFile = _detect_image_library() _dete 中的文件“C:\Python27\lib\site-packages\django\utils\image.py”,第 134 行 ct_image_library “导入:%s”)% 错误 文件“C:\Python27\lib\site-packages\django\utils\functional.py”,第 168 行,在 __mod__ 返回六.text_type(self) % rhs UnicodeDecodeError:“ascii”编解码器无法解码位置 35 中的字节 0xb3:序数 不在范围内(128)

这是我的 models.py 代码:

从 django.db 导入模型 从 django.contrib.auth.models 导入用户 ... 类照片(模型。模型): 标题 = models.CharField(max_length=255) 上传路径 = '/' 照片 = models.ImageField(upload_to=upload_path) def __unicode__(self): 返回self.title

我有 Python 2.7.6、Django 1.6.1、mysql-python-1.2.3。

有人知道为什么会发生异常吗?

【问题讨论】:

是因为图片名中有非ascii(unicode)字符,ascii解码器无法解码 【参考方案1】:

您的问题可能是您的 unicode 方法并没有真正返回 unicode。

应该是这样的

def __unicode__(self):
    return u'%s' % self.title

如果您说这没有解决您的错误,那么您是对的。我去查看 django 代码,发现错误是在其他地方生成的。不过,您的 unicode 方法应该返回 unicode 而不是其他任何东西。

现在关于错误: 它是在 django 尝试导入您的图像库的地方提出的。据我所知,当引发错误生成错误时会出现错误。

您无法修复,但您可以做的是检查您是否安装了所需的映像库。失败的代码(并生成原始错误)是:

import _imaging as PIL_imaging

如何修复它(很可能)是从您的计算机中删除 PIL(如果您有的话)并安装 PILLOW。如果您通读 1.6 发行说明: https://docs.djangoproject.com/en/dev/releases/1.6/ 你可以看到,那个枕头现在是 Django 首选的图像处理库。

从链接页面复制:Pillow 现在是与 Django 一起使用的首选图像处理库。 PIL 正在等待弃用(在 Django 1.8 中将删除支持)。要升级,您应该先卸载 PIL,然后安装 Pillow。

去那里,按照说明卸载 PIL 和安装 PILLOW,然后再次尝试您的代码。

编辑 您实际上不需要卸载/删除 PIL。删除它可能会导致 ubuntu 之类的东西出现问题,而 gnome3 桌面显然需要 PIL...

/编辑

【讨论】:

我试过这个解决方案,但没有帮助。我认为这个问题与 ImageField 密切相关。当我用该字段注释行时,问题就消失了 改变了我的答案。希望它现在对你更有用。如果成功了,别忘了接受答案,这样其他人也可以找到它的用处。【参考方案2】:

非常感谢您,Odif Yltsaeb!有效!

对像我这样的新手的指导:

1) 转到https://pypi.python.org/pypi/Pillow/2.3.0 并下载正确版本的 Pillow

2) 在你的 models.py 中添加

将 PIL.Image 导入为图像

现在应该可以了!

【讨论】:

太好了,对于未来的人们来说,这很有效

以上是关于将 ImageField 添加到模型会导致 django 中的异常的主要内容,如果未能解决你的问题,请参考以下文章

将 CoreData 数据模型文件添加到 XCode 4.2 会导致源代码控制停止使用问号

Django Rest Framework imageField 到服务器

将 ImageField 的内容复制到 Django 中的新文件路径

上传图片ImageField | Django开发

如何使用 ImageField 模型调整使用 Django 上传的图像文件的大小? [关闭]

如何使用ImageField模型调整使用Django上传的图像文件的大小? [关闭]