我认为我在 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>
答案 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('/') 有效