表单不提交值

2024-10-01 19:30:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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: {}>"

Tags: djangonameformid表单inputvaluerequest
3条回答

关于MultiValueDictKeyError你应该做什么

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

另外,最好检查这是否是POST请求

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

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

也可以使用快捷方式render,而不是render_to_response

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

将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>

在视图.py添加

从django.com快捷方式导入渲染到响应

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)

在网址.py你知道吗

urlpatterns = patterns('archive.views',

    (r'^agentUpdate/(\w*)\/?$','agentUpdate'),
)

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

您还应该添加{% csrf_token %},这是^{} protection所必需的。默认情况下,在所有POST请求上都启用此功能。你知道吗

<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})

相关问题 更多 >

    热门问题