Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 多值DictKeyError/request.POST_Python_Django - Fatal编程技术网

Python 多值DictKeyError/request.POST

Python 多值DictKeyError/request.POST,python,django,Python,Django,我想我在请求时遇到了一个问题 在/blog/add/post处出现多值错误/ “标题” 请求方法:获取 请求URL: Django版本:1.8.2 异常类型:多值DictKeyError 异常值: “标题” 异常位置:/usr/local/lib/python2.7/dist-packages/django/utils/datastructures.py在getitem第322行 Python可执行文件:/usr/bin/Python Python版本:2.7.3 视图.py def add_p

我想我在请求时遇到了一个问题

在/blog/add/post处出现多值错误/ “标题” 请求方法:获取 请求URL: Django版本:1.8.2 异常类型:多值DictKeyError 异常值:
“标题” 异常位置:/usr/local/lib/python2.7/dist-packages/django/utils/datastructures.py在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)
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>


标题

类别

标签


正如您的回溯所说:
请求方法:GET
。 因此,您的POST dict显然是空的,因此您得到了您的
KeyError

更改:

def add_post(request):
    entry_title = request.POST["title"]
    return HttpResponse('Hello %s' % entry_title)
致:

它不会抛出一个
键错误
,但是您应该考虑使用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”“

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

错误

正确的一个


因此,在view.py中检查您的路径可能有错误。

对于在POST方法中访问文件,这可能是因为您可能没有在HTML文件的form标记中加密文件,即-

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

是避免多值错误所必需的。

我也有同样的问题,但当我更改时返回HttpResponseRedirect(“”) 到

返回HttpResponseRedirect(“/”)
它成功了,但我试着用POST方法。这就是我编写request.POST['title']和method=“POST”的原因。好吧,我不知道任何细节,但是这个请求有
GET
方法<代码>发布
仅在表单提交时激活。
请求。发布
是一个字典。Python中的字典有一个静态方法,
.get()
内置。当
.get()
找不到您要查找的密钥时,默认情况下,它将返回
None
,或者返回您指定的值。在这种情况下,我返回了
“Guest(或任何东西)”
作为默认值,而不是
None
@alTus如何?这是一种从
请求中获取值的非常有效的方法。如果它存在,则发布
,如果不存在,则返回另一个值。你会怎么处理?我不知道你能比使用
.get()
简洁多少,它在内部执行相同的
KeyError
异常处理。使用
get
是可以的,我只是说作者在通过post方法发送表单时遇到了一些问题,因此他的标题总是空的(默认)。他/她确实需要使用表单或模型表单进行适当的验证等。根据当前的示例代码,还不清楚需要哪些字段。
path('support/',views.**support**,name='support'),

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

path('verifyDB/',views.**verifyDB**,name='verifyDB'),
{form action="upload" method="POST" enctype="multipart/form-data"}
                                    ^^^^^^^^