MultiValueDictKeyError/request.POST

Kwa*_*ang 4 python django

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

/ blog/add/post /"'title'的MultiValueDictKeyError"请求方法:GET请求URL:http ://119.81.247.69:8000/blog/add/post/ Django版本:1.8.2异常类型:MultiValueDictKeyError异常值:
"'title'"异常位置:getusm中的 /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)
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

Bra*_*don 8

更改:

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

至:

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

并且它不会抛出KeyError,但你应该看看使用Django的表单,而不是直接从POST数据中提取值.

或者,您可以保留现有代码并只检查异常:

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

但这就是.get()内部已经做到的.

  • 使用`get`是好的,我只是意味着作者通过post方法发送表单有一些问题,因此他的标题将始终为空(默认). (2认同)