我创建了一个表单来添加两个数字并在/result 处接收 MultiValueDictKeyError "数字1"。 我尝试了很多东西,但无法弄清楚。 我想我会试一试。
@project -> url.py:
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from datetime import datetime
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('app1.urls')),
path('result', include('app1.urls')),
]
urlpatterns = urlpatterns + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
@App-> url.py:
from django.urls import path, include
from django.conf.urls import include, url
from django.conf import settings
from django.conf.urls.static import static
from . import views
from . import urls
from app1.models import Footprint
import app1.views
urlpatterns = [
path("", views.index, name="index"),
path('result', views.calc, name='result'),
]
@App -> views.py:
from django.shortcuts import render
from django.http import HttpResponse
from django.http import HttpRequest,HttpResponseRedirect
from .models import Footprint
# Create your views here.
def index(request):
foots = Footprint.objects.all()
return render(request, "index.html", {'foots': foots})
def calc(request):
val1 = int(request.POST['num1'])
val2 = int(request.POST['num2'])
res = val1 + val2
return render(request,'result.html',{'result': res})
@templates -> 索引.html我在其中编写表单的文件:
{% block content %}
<form action="calc" method="post">
{% csrf_token %}
<p style="color:white;">Installation Cost:</p> <input type="text" name="num1">
<p style="color:white;">Installation Year:</p> <input type="text" name="num2"><br><br>
<p><a href="result" class="btn btn-primary btn-lg btn-custom">SUBMIT</a></p>
</form>
{% endblock %}
@result.html:
{% block content %}
Result: {{result}}
{% endblock %}
@here我收到错误
MultiValueDictKeyError at /result
'num1'
Request Method: GET
Request URL: http://127.0.0.1:8000/result
Django Version: 3.0.3
Exception Type: MultiValueDictKeyError
Exception Value:
'num1'
Exception Location: C:UsersscottEnvsvenvlibsite-
packagesdjangoutilsdatastructures.py in __getitem__, line 78
Python Executable: C:UsersscottEnvsvenvScriptspython.exe
Python Version: 3.8.0
Python Path:
['C:\Users\scott\projects\marciano',
'C:\Users\scott\Envs\venv\Scripts\python38.zip',
'C:\Users\scott\Envs\venv\DLLs',
'C:\Users\scott\Envs\venv\lib',
'C:\Users\scott\Envs\venv\Scripts',
'c:\users\scott\appdata\local\programs\python\python38\Lib',
'c:\users\scott\appdata\local\programs\python\python38\DLLs',
'C:\Users\scott\Envs\venv',
'C:\Users\scott\Envs\venv\lib\site-packages']
Server time: Fri, 14 Feb 2020 21:33:42 -0500
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/result
Django Version: 3.0.3
Python Version: 3.8.0
Installed Applications:
['app1',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback (most recent call last):File "C:UsersscottEnvsvenvlibsite- packagesdjangoutilsdatastructures.py", line 76, in __getitem__
list_ = super().__getitem__(key)
During handling of the above exception ('num1'), another exception occurred:
File "C:UsersscottEnvsvenvlibsite-packagesdjangocorehandlersexception.py", line 34, in inner
response = get_response(request)
File "C:UsersscottEnvsvenvlibsite-packagesdjangocorehandlersbase.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:UsersscottEnvsvenvlibsite-packagesdjangocorehandlersbase.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:Usersscottprojectsmarcianoapp1views.py", line 14, in calc
val1 = int(request.POST['num1'])
File "C:UsersscottEnvsvenvlibsite-packagesdjangoutilsdatastructures.py", line 78, in __getitem__
raise MultiValueDictKeyError(key)
Exception Type: MultiValueDictKeyError at /result
Exception Value: 'num1'
在代码模板中 -> index.html在其中编写表单的文件中指定操作更改calc
以result
,并删除a
和href
并添加<button type='submit'>submit</button>
@index.html
{% block content %}
<form action="result" method="post"> #here change the action
{% csrf_token %}
<p style="color:white;">Installation Cost:</p> <input type="text" name="num1">
<p style="color:white;">Installation Year:</p> <input type="text" name="num2"><br><br>
<p><button type='submit' class="btn btn-primary btn-lg btn-custom">SUBMIT</button></p>
# here above you change the remove a and href='result' it reference and add submit button for submit the data
</form>
{% endblock %}
@apps -> url.py
path('result', views.calc, name='result'), #here you name your url is result
因为您命名了 URL 结果也是删除硬代码的最佳做法 删除 URL 使用该 {% URL %} 模板标记
并在视图中使用 get 函数,您可以在其中获取num1
和num2
@views -> views.py
def calc(request):
val1 = int(request.POST.get('num1 ',1)) # here use the get method of dictionary see in python docs
val2 = int(request.POST.get('num2',1)) # also same change use get method num2 is key and 1 is default value
res = val1 + val2
return render(request,'result.html',{'result': res})
get()
方法是给出一个键的值,如果方法没有找到任何键,它将在这里返回默认值,如果我们不传递默认值,则传递 1 它需要None
在这里,您对代码进行了更改,如果它有效,则最终让我知道这项工作