2011-10-08 36 views
1

我正在用Django为Google App Engine构建一个Web应用程序,使用djangoappengine库。我坚持让图片上传通过管理界面工作。我models.py是:使用Django,Google应用程序引擎上传图像时出错

class Bio(models.Model): 
    name = models.CharField(max_length=25) 
    about = models.TextField() 
    email = models.TextField() 
    pic = models.ImageField(upload_to="img/bios/", null=True, blank=True) 

当我尝试在默认的管理界面上传一张图片,在本地和Appspot上网站上,我得到:“导入错误:没有模块命名的图像”

但是! - 当我运行manage.py shell时,我能够成功地import Imagefrom PIL import Image,所以我不确定我在这里错过了什么。有任何想法吗?

+1

App引擎不支持PIL(使用Python 2.5;它在2.7上工作)。 Django的shell不执行App Engine沙盒限制。 –

回答

2

http://www.allbuttonspressed.com/projects/djangoappengine#field-types表示不支持ImageField。

尝试上传到blobstore(请参阅http://code.google.com/appengine/docs/python/blobstore/overview.html)。这基本上使用一个中间处理程序来存储图像,将blob键而不是文件传递到目标处理程序。

+0

我该如何去做呢?我可以使用默认的管理界面,还是需要以某种方式创建自定义类?我发现[本网站](http://blog.sserrano.com/post/479962742/blobstore-upload-with-django-form-validation-example),它解释了如何制作自定义表单页面,但我想能够在我的models.py(目前发生错误)中放入像BlobField这样的东西。 – whrrgarbl

+0

http://code.google.com/appengine/docs/python/blobstore/overview.html#Uploading_a_Blob –

2

Django的ImageField使用PIL来检查上传的文件是否实际上是一个图像。问题是,最初PIL在AppEngine服务器上不可用,所以您必须改用AppEngine的Images API

当用谷歌搜索时,我发现ImageField小部件的AppEngine的this implementation,它使用google.appengine.api.images而不是PIL。

虽然现在看起来像AppEngine支持Python 2.7上的PIL。因此,如果您在AppEngine上开发Python 2.7应用程序,您只需打开PIL的支持in app.yaml

相关问题