django详细视图中的MultiValueDictKeyError

时间:2017-08-15 16:47:12

标签: python django

我在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'” 我不知道为什么......让我知道是否有人知道。

2 个答案:

答案 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']