我正在尝试从中检索“名称”值:
<input type="text" name="fullname" value="">
并将其显示在另一页上,但是当我调用request.GET["fullname"]
时,我一直收到MultiValueDictKeyError,但是如果我使用request.POST.get('fullname', False)
,它将返回None。
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def hello(request):
return HttpResponse('Hello World')
def index(request):
fn= request.GET["fullname"]
crs= request.GET["course"]
st='your welcome to first_app/index.html'
return render(request,'first_app/index.html',{'st':st,'fn':fn,'crs':crs})
def courses(request):
string= 'my name is ibi'
return render(request,'first_app/courses.html',{'st':string})
from django.urls import path
from first_app import views
urlpatterns =[
path('',views.index, name='index'),
path('courses/', views.courses, name='courses'),
]
请问如何纠正此错误,并在另一个html页面上显示名称值
答案 0 :(得分:0)
看起来您的表单提交不正确。
使用<form method="get">
数据提交的表单将在request.GET
中可用,并且提交的内容将显示在url上。
为防止键错误,您可以设置默认值,如果字典request.GET('fullname', None)
中没有键,则将设置默认值,以后您可以对其进行验证。
类似地,<form method="post">
中将提供request.POST
数据。
无论使用哪种方法,都可以在request.body
中访问表单的原始数据。
答案 1 :(得分:-1)
您的输入字段已损坏(未归因于id
)
<input type="text" id="fullname" name="fullname" value="foo">
不确定表单的其余部分如何,但是假设它具有以下属性:
<form action='.' method='POST'>
</form>
您想要做的是修改您的index
视图:
def index(request):
context = {'st': ''your welcome to first_app/index.html'', 'fn': '', 'crs': ''} # you want a default context
if request.method == 'POST':
context['fn'] = request.POT.get('fullname')
context['crs'] = request.POST.get('course')
return render(request,'first_app/index.html',{'st':st,'fn':fn,'crs':crs})
您将仅在POST
个请求中查找通过表单提交的信息。
一些对您有帮助的读物:
以后的修改:
我很确定当您尝试加载页面时,您的视图崩溃了;这是因为您有request.GET['fullname']
,但您的URL中没有类似的内容。这就是为什么建议使用.get()
ipdb> request
<WSGIRequest: GET '/lol/'>
ipdb> request.GET
<QueryDict: {}>
ipdb> request.GET['fullname']
*** django.utils.datastructures.MultiValueDictKeyError: 'fullname'
ipdb>