我已经创建了一个基本的CMS,我的下一步是添加图片上传功能。我在models.py中添加了一些行,之后因为UnicodeDecodeError我的模型没有验证:
Unhandled exception in thread started by Traceback (most recent call last): File "C:\Python27\lib\site-packages\django\utils\autoreload.py", line 93, in w rapper fn(*args, **kwargs) File "C:\Python27\lib\site-packages\django\core\management\commands\runserver. py", line 101, in inner_run self.validate(display_num_errors=True) File "C:\Python27\lib\site-packages\django\core\management\base.py", line 310, in validate num_errors = get_validation_errors(s, app) File "C:\Python27\lib\site-packages\django\core\management\validation.py", lin e 113, in get_validation_errors from django.utils.image import Image File "C:\Python27\lib\site-packages\django\utils\image.py", line 154, in Image, _imaging, ImageFile = _detect_image_library() File "C:\Python27\lib\site-packages\django\utils\image.py", line 134, in _dete ct_image_library "imported: %s") % err File "C:\Python27\lib\site-packages\django\utils\functional.py", line 168, in __mod__ return six.text_type(self) % rhs UnicodeDecodeError: 'ascii' codec can't decode byte 0xb3 in position 35: ordinal not in range(128)
这是我的models.py代码:
from django.db import models from django.contrib.auth.models import User ... class Photo(models.Model): title = models.CharField(max_length=255) upload_path = '/' photo = models.ImageField(upload_to=upload_path) def __unicode__(self): return self.title
我有Python 2.7.6,Django 1.6.1,MySQL-python-1.2.3。
有人知道异常发生的原因吗?
答案 0 :(得分: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 ......
<强> /修改
答案 1 :(得分:1)
非常感谢,Odif Yltsaeb!它有效!
像我这样的新手的指示:
1)转到https://pypi.python.org/pypi/Pillow/2.3.0并下载正确版本的Pillow
2)到你的models.py添加
import PIL.Image as Image
现在应该可以了!