MultiValueDictKeyError Использование Appengine SDK и Django для загрузки файлов

Может ли кто-нибудь помочь мне определить мою проблему здесь:

Я пытаюсь реализовать процедуру загрузки файлов с помощью appengine и django, и я столкнулся с ошибкой MultiValueDictKeyError. Похоже, что файл не попадает с веб-страницы на сервер.

Некоторая часть этого является обучающим упражнением, поэтому я не хочу использовать djangoform для обработки данных за меня.

Я использую SDK версии 1.1.8, django версии 1.1.0 alpha и google-appengine-django r68

Мой html выглядит так:

<form method="POST" action="." enctype="multipart/form-data">
  Title: <input type="text" name="title"/>
  Text: <input type="text" name="txt"/>
  Image: <input type="file" name="imgfile"/>

  <input type="submit"/>
</form>

Мой питон выглядит так:

индекс def (запрос):

if request.POST:
   newtxt = TestModel()
   newtxt.title = request.POST.get('title', '')
   newtxt.txt = request.POST.get('txt', '')
   blFileData = request.FILES['imgfile'].read()
   if blFileData:
       newtxt.img = blFileData
   newtxt.put()

return render_to_response('index.html', ({'filestore': query,}))

Ошибка выглядит так:

MultiValueDictKeyError в /

"Ключ imgfile не найден в"

Метод запроса: URL-адрес запроса POST: http://localhost:8000/ Тип исключения: MultiValueDictKeyError Значение исключения: "Key" imgfile 'не найден в "Местоположение исключения: /Users/david/Sites/testsite/myapp/views.py в индексе, строка 19 Исполняемый файл Python: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/ Содержание / MacOS / Python Версия Python: 2.5.2

/Users/david/Sites/testsite/myapp/views.py в индексе blFileData = request.FILES ['imgfile']. Read () ... ▼ Локальные переменные Значение переменной newtxt
TestModel (** {'txt' : u'World ',' img ': None,' title ': u'Hello'}) запрос, POST :, COOKIES: {}, META: {'APPLICATION_ID': 'google-app-engine-django', ' AUTH_DOMAIN ':' gmail.com ',' CONTENT_LENGTH ':' 21 ',' CONTENT_TYPE ':' application / x-www-form-urlencoded ',' CURRENT_VERSION_ID ':' 1.1 ',' GATEWAY_INTERFACE ':' CGI / 1.1 ' , 'HTTP_ACCEPT': 'text / xml, application / xml, application / xhtml + xml, text / html; q = 0.9, text / plain; q = 0.8, image / png, * / *; q = 0.5', ' HTTP_ACCEPT_LANGUAGE ':' en ',' HTTP_CONNECTION ':' keep-alive ',' HTTP_HOST ':' localhost: 8000 ',' HTTP_REFERER ':' http://localhost:8000/ ',' HTTP_USER_AGENT ':' Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_4_11; en) Версия AppleWebKit / 525.27.1 (KHTML, как Gecko) /3.2.1 Safari / 525.27.1 ',' PATH_INFO ': u' / ',' PATH_TRANSLATED ': u' / Users / david / Sites / testsite / main.p y ',' QUERY_STRING ':' ',' REMOTE_ADDR ':' 127.0.0.1 ',' REQUEST_METHOD ':' POST ',' SCRIPT_NAME ': u' ',' SERVER_NAME ':' localhost ',' SERVER_PORT ':' 8000 ',' SERVER_PROTOCOL ':' HTTP / 1.0 ',' SERVER_SOFTWARE ':' Разработка / 1.0 ',' TZ ':' UTC ',' USER_EMAIL ':' ',' wsgi.errors ':', режим 'w' в 0x130b0>, 'wsgi.input':, 'wsgi.multiprocess': Ложь, 'wsgi.multithread': Ложь, 'wsgi.run_once': Истина, 'wsgi.url_scheme': 'http', 'wsgi.version': (1, 0)}>

Мысли? Спасибо Дэвид


person Community    schedule 21.01.2009    source источник


Ответы (3)


По какой-то причине файл не загружается или, если вообще, он привязывается к другому ключу в запросе.

Попробуйте зарегистрировать значение request.FILES или попробуйте проверить его значение в обработчике и посмотреть, что на самом деле содержится в request.FILES dict. Это может привести к прорыву.

Чтобы установить трассировку, вы можете использовать pdb.

import pdb
pdb.set_trace()
person Community    schedule 21.01.2009

Я тоже столкнулся с этой ошибкой, но это потому, что я использовал encoding = "multipart / form-data", что, на мой взгляд, неверно. Я перешел на enctype = "multipart / form-data", и он работает.

person Community    schedule 10.11.2009

Ладно, случилось самое странное. Я написал этот вопрос до того, как подписал вчера. Когда я загрузился сегодня вечером, чтобы попробовать еще раз, все заработало до того, как я внес в него какие-либо изменения. В любом случае спасибо за помощь.

person Community    schedule 22.01.2009