0

我在 Django 中有一个 HTML 表单,但我没有使用 Django 表单类。

现在我想知道如何处理这个 html 表单?(方法是POST

表单是由生成的,xsl但最终生成的表单是这样的:

<form method="POST" id="settingSubmit" action="/archive/agentUpdate/1">
    <input value="1" name="AgentID" datatype="Int">
    <input value=" agent 1" name="AgentName">
    <input value=" agent 1 Description" name="AgentDescription">
    <input value="submit" id="sendbutton" type="submit">
</form>

和观点:

def agentUpdate(request,id):
    agentName = request.POST['AgentName']

    return render_to_response('archive/base.html',{
        'agentName':agentName
    },
        RequestContext(request, ))

网址.py:

urlpatterns = patterns('archive.views',

    url(r'^agentUpdate/(?P<id>\w+)/$',
        'agentUpdate',
        name='agent_Update'),
)

错误:

MultiValueDictKeyError at /archive/agentUpdate/2/

"Key 'AgentName' not found in <QueryDict: {}>"
4

3 回答 3

0

关于MultiValueDictKeyError你应该做

agentName = request.POST.get('AgentName')

也将更好地检查这是否是一个POST请求

if request.POST:
    agentName = request.POST.get('AgentName')

然后使用这些数据,您可以做任何您想做的事情 - 验证,将其保存到数据库,以任何其他方式处理。

也可以代替render_to_response您使用快捷方式render

return render(request, 'archive/base.html', {'agentName': agentName})
于 2012-09-15T08:48:51.837 回答
0

通过添加到表单字段来修复表单的 HTML type="hidden",否则它们将不会作为您请求的一部分提交。

您还应该添加保护{% csrf_token %}所需的内容。这在所有请求上默认启用。CSRFPOST

<form method="POST" id="settingSubmit" action="/archive/agentUpdate/1">
    {% csrf_token %}
    <input value="1" type="hidden" name="AgentID" datatype="Int">
    <input value=" agent 1" type="hidden" name="AgentName">
    <input value=" agent 1 Description" type="hidden" name="AgentDescription">
    <input value="submit" id="sendbutton" type="submit">
</form>

最后,在您看来:

from django.shortcuts import render

def agentUpdate(request,id):
    if request.method == 'POST':
        agentName = request.POST.get('AgentName')
        return render(request, 'archive/base.html', {'agentName':agentName})
于 2012-09-17T05:27:56.987 回答
0

将 csrf 令牌添加到您的表单

<form method="POST" id="settingSubmit" action="/archive/agentUpdate/1">
    {% csrf_token %}
    <input value="1" type="hidden" name="AgentID" datatype="Int">
    <input value=" agent 1" type="hidden" name="AgentName">
    <input value=" agent 1 Description" type="hidden" name="AgentDescription">
    <input value="submit" id="sendbutton" type="submit">
</form>

在views.py 中添加

从 django.shortcuts 导入 render_to_response

def agentUpdate(request,id):
    if request.method == 'POST':
        agentName = request.POST.get('AgentName')
        variables = RequestContext(request, {'agentName':agentName})
        return render_to_response('archive/base.html', variables)

在 urls.py

urlpatterns = patterns('archive.views',

    (r'^agentUpdate/(\w*)\/?$','agentUpdate'),
)
于 2012-09-17T06:45:15.670 回答