提问者:小点点

多值DictKeyError/request.POST


我想我在请求时遇到了问题。POST['title']

MultiValueDictKeyError位于/blog/add/post/“'title'”请求方法:GET请求URL:http://119.81.247.69:8000/blog/add/post/Django版本:1.8.2异常类型:MultiValueDictKeyError异常值:
“'title'”异常位置:/usr/local/lib/python2.7/dist-packages/Django/utils/datastructures。getitem中的py,第322行Python可执行文件:/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)

写入.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>

共3个答案

匿名用户

改变:

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() 在内部已经执行的操作。

匿名用户

我也有同样的问题,我发现我忘记在Html页面的输入类型中添加"name="text""

匿名用户

正如您的回溯所说:请求方法:GET。所以您的POST判决显然为空,因此您会得到您的KeyError