繁体   English   中英

Django中的MultiValueDictKeyError

[英]MultiValueDictKeyError in django

嗨,我正在尝试在django中创建一个注册页面-

我的views.py-

from django.shortcuts import render, redirect
from django.http import HttpResponseRedirect

def home(request):
    if request.method == 'POST':
        post = request.POST
        if 'signup' in post:
            return HttpResponseRedirect('/wall/signup')
    return render(request, 'wall/home_page.html')

def signup(request):
    if request.method == 'POST':
        post = request.POST
        username = post['username']
        password = post['password']
        return success(request, username)
    return render(request, 'wall/signup.html')

def success(request, name):
    if request.method == 'POST':
        post = request.POST
        if 'home' in post:
            return HttpResponseRedirect('/wall')
    return render(request, 'wall/success_page.html', {'name': name}) 

和我的success_page.html-

<html>
    <body>
        Success {{ name }}
        <form id="form" method="post">
            {% csrf_token %}
            <button type="submit" name="home">
                Home
            </button>
        </form>
    </body>
</html>

但是当我点击“主页”按钮时,它给出了错误-

MultiValueDictKeyError at /wall/signup/

"'username'"

我认为这行username = post['username']给出了此错误

我不知道如何解决它,我什至不知道为什么我得到这个错误。

我该如何解决?

success_page.html中的<form>标记没有action属性,因此,您单击Home按钮,会将表单发送回signup()视图。

您应该更改signup()视图以重定向到成功视图,而不是返回success()的结果:

def signup(request):
    if request.method == 'POST':
        ...
        return redirect('signup_success', username)

其中signup_success是指向success()视图的URL的名称。

urlpatterns = patterns('',
    ...
    url(r'^success/(?P<name>\w+)/$', views.success, name='signup_success'),
    ...
)

或者,将action属性添加到success_page.html

<form id="form" action="{% url 'signup_success' name %}" method="post">

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM