Python django视图中POST请求中的多个值不起作用
我有三个不同的按钮用于不同的目的(从表中插入和删除),每个按钮在POST中处理不同的值。我设法用我的手做了一次 if request.method==“POST”和request.POST.get(“按钮的名称”)==“按钮的值” 但是,当我把同样的想法再次用于不同的按钮时,它就是不起作用。每个条件中的代码都运行良好,只是在添加第二个条件时没有进入if 视图.pyPython django视图中POST请求中的多个值不起作用,python,django,forms,post,request,Python,Django,Forms,Post,Request,我有三个不同的按钮用于不同的目的(从表中插入和删除),每个按钮在POST中处理不同的值。我设法用我的手做了一次 if request.method==“POST”和request.POST.get(“按钮的名称”)==“按钮的值” 但是,当我把同样的想法再次用于不同的按钮时,它就是不起作用。每个条件中的代码都运行良好,只是在添加第二个条件时没有进入if 视图.py def listpolls(request): #mysql connection here# form = A
def listpolls(request):
#mysql connection here#
form = AddPollForm()
form_del = DelPollForm()
if request.method == 'POST' and request.POST.get("btn_add_name", "") == 'btn_add_val':
form = AddPollForm(request.POST)
form_del = DelPollForm(request.POST)
if form.is_valid():
ip = form.cleaned_data['poll_ip']
#poll_time = form.... etc
#whatever you want to do here#
return HttpResponseRedirect('listpolls.html')
else:
return render_to_response("listpolls.html",{"buffer_data": b, 'form': form, 'form_del': form_del} )
elif request.method == 'POST':
#whatever you want to do here#
return HttpResponseRedirect('listpolls.html')
elif request.method == 'POST' and request.POST.get("btn_delbyip_name", "") == 'btn_delbyip_val':
#whatever you want to do here#
return HttpResponseRedirect('listpolls.html')
else:
return HttpResponseRedirect('listpolls.html')
else:
return render_to_response("listpolls.html",{"buffer_data": b, 'form': form, 'form_del': form_del} )
模板
<form action="/services/listpolls/" method="post">{% csrf_token %}
{{ form }}
<button type="submit" value="btn_add_val" name="btn_add_name">Añadir</button>
</form>
<form action="/services/listpolls/" method="post">{% csrf_token %}
{{ form_del }}
<button type="submit" value="btn_delbyip_val" name="btn_delbyip_name">Borrar por IP</button>
</form>
<form action="/services/listpolls/" method="post">{% csrf_token %}
<button type="submit" value="{{b.id}}" name="btn_borrar" class="delete_poll">Borrar</button>
</form>
{%csrf\u令牌%}
{{form}}
阿尼亚迪尔
{%csrf_令牌%}
{{form_del}}
博拉尔·波尔·伊普
{%csrf_令牌%}
博拉尔
这是一个简单的逻辑错误。如果操作是POST,但按钮不是“btn_add_val”,则第一个elif会捕获每个情况。如果您想捕获“btn\u delbyip\u name”,您应该将其移动到该elif之前。删除所有不相关的代码后,您的“If”逻辑结构如下:
def listpolls(request):
if request.method == 'POST' and request.POST.get("btn_add_name", "") == 'btn_add_val':
pass
elif request.method == 'POST':
pass
elif request.method == 'POST' and request.POST.get("btn_delbyip_name", "") == 'btn_delbyip_val':
pass
else:
pass
解释这一结构:
首先,if将检查请求是否为POST,以及某些POST参数是否具有所需的值。如果是的话,它将计算出一些东西并留下整个结构。如果没有,它将继续到下一个elif
第二个将检查请求是否为POST。如果是的话,它将计算出一些东西并留下整个结构。如果没有,它将继续到下一个elif
第三个将检查请求是否为POST,以及某些POST参数是否具有所需的值。如果是的话,它将计算出一些东西并留下整个结构。如果没有,它将继续向其他国家提供援助
Else将计算一些东西,并留下if的结构
现在我们可以清楚地看到这里发生了什么,如果第一个条件不是真的,而这是post请求,那么第二个条件将始终是真的!所以第三个条件甚至不会被检查。您只需交换第二个和第三个条件(附带完整的代码),它就可以工作。是的,我刚刚注意到删除了所有不必要的代码并专注于此,谢谢!!