2011-10-08 22 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

相關問題