简体   繁体   中英

MultiValueDictKeyError / request.POST

I think I hav a problem at request.POST['title']

MultiValueDictKeyError at /blog/add/post/ "'title'" Request Method: GET Request URL: http://119.81.247.69:8000/blog/add/post/ Django Version: 1.8.2 Exception Type: MultiValueDictKeyError Exception Value:
"'title'" Exception Location: /usr/local/lib/python2.7/dist- packages/django/utils/datastructures.py in getitem , line 322 Python Executable: /usr/bin/python Python Version: 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>

Change:

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

to:

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

and it won't throw a KeyError , but you should look at using Django's forms rather than pulling values directly from the POST data.

Alternatively, you can keep your existing code and simply check for the exception:

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

but this is what .get() does internally already.

我遇到了同样的问题,我发现我忘记在我的 Html 页面的input type中添加"name=" text" " ..

As your traceback says: Request Method: GET . So your POST dict is obviously empty and thus you get your KeyError .

In Django project, I was facing the same problem, I did a mistake in url.py

wrong

path('support/',views.**support**,name='support'),

path('verifyDB/',views.**support**,name='verifyDB'),

correct one

path('support/',views.**support**,name='support'),

path('verifyDB/',views.**verifyDB**,name='verifyDB'),

so, check your path in view.py maybe there is a mistake.

For accessing Files in POST method this could be because you might have missed encrypting the files in form tag of the HTML file ie-

{form action="upload" method="POST" enctype="multipart/form-data"}
                                    ^^^^^^^^

is required to avoid MultiValueDictError.

I had the same problem,but when i changed return HttpResponseRedirect('') to

return HttpResponseRedirect('/') it worked

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM