2015-06-07 3 views
4

Я думаю, что я ВГА проблему на request.POST [ 'титул']MultiValueDictKeyError/request.POST

MultiValueDictKeyError в/блог/добавить/запись/ " 'название'" Запрос Метод: GET Request URL: http://119.81.247.69:8000/blog/add/post/ Джанго Версия: 1.8.2 Тип Exception: MultiValueDictKeyError Exception значение:
"" название" Исключение Расположение: /usr/local/lib/python2.7/dist- пакеты/Джанго/Utils/datastructur es.py в GetItem, строка 322 Python Исполняемые:/USR/бен/питон Python Версия: 2.7.3

views.py

def add_post(request): 
    entry_title = request.POST["title"] 
    return HttpResponse('Hello %s' % entry_title) 

write.html

<form method="POST" action="/blog/add/post/"> 
<p> 
    <label for "title">Title</label> 
    <input type="text" id="title" name="title" value="" /> 
</p> 
<p> 
    <label for 'category'>Category</label> 
    <select id="category" name="category"></select> 
</p> 
<p> 
    <label for 'tags'>Tags</label> 
    <input type="text" id="tags" value="" /> 
</p> 
<p> 
    <textarea id="content" name="content"></textarea> 
</p> 
<p> 
    <input type="submit" value="Write" /> 
</p> 

ответ

7

Изменение:

def add_post(request): 
    entry_title = request.POST["title"] 
    return HttpResponse('Hello %s' % entry_title) 

к:

def add_post(request): 
    entry_title = request.POST.get("title", "Guest (or whatever)") 
    return HttpResponse('Hello %s' % entry_title) 

и он не будет бросать KeyError, но вы должны смотреть на использовании форм Django, а не вытягивать значения непосредственно из данных POST.

В качестве альтернативы, вы можете сохранить существующий код и просто проверить, за исключением:

def add_post(request): 
    try: 
     entry_title = request.POST["title"] 
    except KeyError: 
     entry_title = "Guest" 
    return HttpResponse('Hello %s' % entry_title) 

, но это то, что делает .get() внутри уже.

+0

О! Оно работает!!! Не могли бы вы рассказать мне, что отличает предыдущий? – Kwang

+0

'request.POST' - это словарь. Словари в Python имеют статический метод '.get()' встроенный. Когда '.get()' не может найти ключ, который вы ищете, он вернет 'None' по умолчанию или указанное вами значение. В этом случае я вернул «Гость» (или что-то еще) »в качестве значения по умолчанию вместо« Нет » – Brandon

+1

Он замалчивает ошибку, но не решает проблему. – alTus

0

Как говорится в вашей трассе: Request Method: GET. Итак, ваш POST dict явно пуст, и вы получаете KeyError.

+0

но я пытался использовать метод POST. Вот почему я написал request.POST ['title'] и method = "POST" – Kwang

+0

Ну, я не знаю никаких подробностей, но этот запрос имеет метод GET. 'POST' активируется только при отправке формы. – alTus

1

У меня была такая же проблема, я обнаружил, что забыл добавить "name=" text" " в моем input type в моей странице Html ..