/add处的多值错误,请求方法:GET

2024-04-24 10:50:51 发布

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

这是my views.py文件

from django.shortcuts import render

def home(request):
    return render(request, 'home.html',{'name':'irtiza'})

def add(request):

val1 = int(request.GET['num1'])
val2 = int(request.GET['num2'])
res = val1 + val2

return render(request, "result.html",{'result': res})

当我运行这个代码时,我得到了这个错误

error

然后我尝试了以下代码:

def add(request):

    val1 = int(request.GET.get(['num1']))
    val2 = int(request.GET.get(['num2']))
    res = val1 + val2

    return render(request, "result.html",{'result': res})

出现此错误

enter image description here

url.py文件

from django.urls import path 
from . import views

urlpatterns = [
    path("",views.home,name="home"),
    path("add", views.add, name="add")
]

home.html文件

{% extends 'base.html' %}

{% block content %}

<h1> hello  {{name}} </h1>

<form action="add">

    {% csrf_token %}

    Enter 1st number : <input type="text" name="num1"><br>
    Enter 2nd number : <input type="text" name="num2"><br>
    <input type="submit">

</form>

{% endblock %}

Result.html文件

{% extends 'base.html' %}

{% block content %}

    Result : {{result}}

{% endblock %}

当我尝试POST函数时,它会给出下面提到的错误

from django.shortcuts import render

# Create your views here.

def home(request):
    return render(request, 'home.html',{'name':'irtiza'})

def add(request):

    val1 = int(request.POST['num1'])
    val2 = int(request.POST['num2'])
    res = val1 + val2

    return render(request, "result.html",{'result': res})

在/添加时出现多值错误 “num1” 请求方法:获取 请求URL:http://127.0.0.1:7000/add?csrfmiddlewaretoken=t6mVWboKI37vxW3zDbVmpnB3j3g89EzjFhikDDMrB4qVEfrNyqG5pebeXgDLAFE0&num1=3&num1=3 Django版本:3.0.3 异常类型:多值DictKeyError 异常值:
“num1” 异常位置:C:\Users\irtiza\AppData\Local\Continuum\anaconda3\lib\site packages\django\utils\datastructures.py,位于getitem第78行 Python可执行文件:C:\Users\irtiza\AppData\Local\Continuum\anaconda3\Python.exe Python版本:3.7.4

我现在应该如何解决此错误。这只是一个简单的函数来添加两个数字。请帮助我


Tags: nameaddhomereturnrequestdefhtmlres
3条回答

基本上,home.html中的表单中缺少了(method=“post或GET”)

我所作的更改如下:

home.html

{% extends 'base.html' %}

{% block content %}

<h1> hello  {{name}} </h1>

<form action="add" method="POST">

    {% csrf_token %}

    Enter 1st number : <input type="text" name="num1"><br>
    Enter 2nd number : <input type="text" name="num2"><br>
    <input type="submit">

</form>

{% endblock %}

views.py

from django.shortcuts import render

def home(request):
    return render(request, 'home.html',{'name':'irtiza'})

def add(request):

val1 = int(request.POST['num1'])
val2 = int(request.POST['num2'])
res = val1 + val2

return render(request, "result.html",{'result': res})

然后它工作得很好

您在url中传递了两次num1,如下所示

url - http://127.0.0.1:7000/add?csrf.......&num1=2&num1=3

改成吹

url - http://127.0.0.1:7000/add?csrf.......&num1=2&num2=3

从下面得到它

def add(request):

    val1 = int(request.GET.get('num1'))
    val2 = int(request.GET.get('num2'))
    res = val1 + val2

    return render(request, "result.html",{'result': res})

并将这一行从您的表单中更改如下

Enter 2nd number : <input type="text" name="num2"><br>

拆下方括号。这不是必需的

val1 = int(request.GET.get('num1'))
val2 = int(request.GET.get('num2'))

相关问题 更多 >