MultiValueDictKeyError в / add, метод запроса: GET - PullRequest
1 голос
/ 11 марта 2020

это мой файл 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})

когда я запускаю этот код, я получаю эту ошибку,

ошибка

затем я попробовал этот код:

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

эта ошибка возникает.

введите описание изображения здесь

urls.py file

from django.urls import path 
from . import views

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

home. html file

{% 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 file

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

MultiValueDictKeyError в / оных 'num1' Request Метод: GET URL запроса: http://127.0.0.1: 7000 / добавить csrfmiddlewaretoken = t6mVWboKI37vxW3zDbVmpnB3j3g89EzjFhikDDMrB4qVEfrNyqG5pebeXgDLAFE0 & num1 = 3 & num1 = 3 Django Версия: 3.0.3 Тип исключения: MultiValueDictKeyError Значение исключения:
'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 Versi on: 3.7.4

что мне теперь делать, чтобы устранить эту ошибку. Это просто простая функция для добавления двух чисел. Пожалуйста, помогите мне.

Ответы [ 3 ]

1 голос
/ 11 марта 2020

Вы проходите два раза num1 в своем URL, как показано ниже ...

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>
0 голосов
/ 11 марта 2020

В основном мне не хватало (method = "post or GET") в форме дома. html

Внесенные мной изменения:

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

и тогда все работает нормально.

0 голосов
/ 11 марта 2020

Снять квадратные скобки. Не требуется.

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