繁体   English   中英

MultiValueDictKeyError / request.POST

[英]MultiValueDictKeyError / request.POST

我想我在request.POST['title']有问题

MultiValueDictKeyError at /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.py in getitem ,第 322 行 Python 可执行文件:/usr/bin/python Python 版本:2.7.3

视图.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>

改变:

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 页面的input type中添加"name=" text" " ..

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

在 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 中的路径,也许有错误。

对于在 POST 方法中访问文件,这可能是因为您可能错过了对 HTML 文件的表单标记中的文件进行加密,即-

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

需要避免 MultiValueDictError。

我遇到了同样的问题,但是当我将 return HttpResponseRedirect('') 更改为

返回 HttpResponseRedirect('/') 它有效

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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