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

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

Я пытаюсь реализовать процедуру загрузки файла, используя 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>

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

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

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 at /

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

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

/ Пользователи / 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': ' / 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, текст / текст; q = 0,8, изображение / 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; ru) AppleWebKit / 525.27.1 (KHTML, как Gecko) Версия / 3.2 .1 Safari / 525.27.1 ',' PATH_INFO ': u' / ',' PATH_TRANSLATED ': u' / Users / david / Sites / testsite / main.py ',' 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 ' : 'Development / 1.0', 'TZ': 'UTC', 'USER_EMAIL': '', 'wsgi.errors': ', режим' w 'в 0x130b0>,' wsgi.in put ':,' wsgi.multiprocess ': False,' wsgi.multithread ': False,' wsgi.run_once ': True,' wsgi.url_scheme ':' http ',' wsgi.version ': (1, 0)} >

Мысли? Спасибо, David

Ответы [ 3 ]

1 голос
/ 10 ноября 2009

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

1 голос
/ 21 января 2009

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

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

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

import pdb
pdb.set_trace()
0 голосов
/ 22 января 2009

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

...