我在django制作应用程序。这是我的index.html页面。
<!DOCTYPE html>
<html>
<head>
<title>The index page</title>
</head>
<body>
<h1>Choose the name of student</h1>
<form action= "{% url 'detail' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<select name="namedrop">
{% for name in student_list %}
<option>{{name.stuname}}</option>
{% endfor %}
</select>
<input type="submit" name="submit">
</form>
</body>
</html>
这是我的studinfo / urls.py
from django.conf.urls import url
from . import views
from .models import student
urlpatterns= [
url(r'^$',views.index ,name='index'),
url(r'^detail/$',views.detail ,name='detail'),
]
这是views.py
from .models import student
from django.http import Http404
from django.shortcuts import render
from django.template import loader
from django.http import HttpResponse
def index(request):
student_list=student.objects.all()
template = loader.get_template('studinfo/index.html')
context= { 'student_list' : student_list, }
return HttpResponse(template.render(context, request))
def detail(request):
if request.method=='POST':
name=request.GET['namedrop']
return render(request, 'detail.html', {'name':name})
现在它引发了一个错误 / studinfo / detail /中的MultiValueDictKeyError “ 'namedrop'” 我不知道为什么......让我知道是否有人知道。
答案 0 :(得分:4)
如果request.GET
是拼写错误,而您的意思是request.POST['namedrop']
,那么您应该做两件事。
在您的观点中尝试此操作:
name=request.POST.get('namedrop', '') # give it a default value
即使未发送namedrop
,也可确保您不会出现任何错误。并且您可以提供默认值。
然后,在index.html中,您应该为option
代码添加值:
<option value={{name.stuname}}>{{name.stuname}}</option>
没有它,任何事情都无法实现。
希望它有所帮助!
答案 1 :(得分:2)
一个非常简单的错误是,您正在尝试获取GET请求数据,而您正在接收帖子数据。
更改此
name=request.GET['namedrop']
到此
name=request.POST['namedrop']