Django视图中POST请求中的多个值无效

2024-10-03 21:26:47 发布

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

我有三个不同的按钮用于不同的目的(从表中插入和删除),每个按钮在POST中应该处理不同的值。我试过一次

如果请求.方法==‘发布’和请求.POST.get(“name_of_button”,“”)=='值_of_button'

但当我用同样的想法换一个不同的按钮时,它就不起作用了。每一个条件里面的代码都能正常工作,只是当我添加第二个条件时,它没有进入if。在

视图.py

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

模板

^{pr2}$

Tags: tonameformgetreturnifhererequest
2条回答

删除所有不相关的代码后,您就有了这样的“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。在

第二个将检查请求是否已发送。如果是的话,它会计算一些东西,然后离开整个结构。如果没有,它将继续到下一个elif。在

第三个将检查请求是否为POST,以及某些POST参数是否具有所需的值。如果是的话,它会计算一些东西,然后离开整个结构。如果没有,它将继续到其他地方。在

Else会计算一些东西,然后离开if的结构

现在我们可以清楚地看到这里发生了什么,如果第一个条件不是真的,这是post请求,那么第二个条件将始终为真!所以第三个条件都不会被检查。您应该简单地交换第二个和第三个条件(将整个代码附加到其中),这样就可以工作了。在

这是一个简单的逻辑错误。每个动作是POST但按钮不是“btn_add_val”的情况都会被第一个elif捕获。如果你想抓住“btn_delbyip_name”,你应该把它移到elif之前。在

相关问题 更多 >