MultiValueDictKeyError / request.POST

时间:2015-06-07 16:47:08

标签: python django

我认为我在 request.POST ['title']

有问题
  

/ blog / add / post /中的MultiValueDictKeyError     “'标题'”         请求方法:GET         请求网址:http://119.81.247.69:8000/blog/add/post/         Django版本:1.8.2         异常类型:MultiValueDictKeyError         例外价值:
            “'标题'”         异常位置: getitem 中的/usr/local/lib/python2.7/dist- packages / django / utils / datastructures.py,第322行         Python可执行文件:/ usr / bin / python         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>

6 个答案:

答案 0 :(得分: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()已经在内部做的事情。

答案 1 :(得分:3)

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

答案 2 :(得分:0)

正如您的追溯所说:Request Method: GET。 所以你的POST字典显然是空的,因此你得到了KeyError

答案 3 :(得分:0)

在Django项目中,我遇到了同样的问题,我在url.py中犯了一个错误

错误

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

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

正确的一个

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

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

因此,请在view.py中检查您的路径,也许是错误的。

答案 4 :(得分:0)

要以POST方法访问文件,这可能是因为您可能错过了对HTML文件的表单标签中的文件进行加密的操作,即-

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

是必须的,以避免MultiValueDictError。

答案 5 :(得分:0)

我遇到了同样的问题,但是当我更改时返回HttpResponseRedirect('')

返回HttpResponseRedirect('/') 有效