使用django

时间:2017-09-22 14:12:40

标签: python django

我正在尝试为自定义用户注册表单保存帖子数据,但我无法确定哪里出错了。我怀疑问题出在mainapp/urls。我已经对这个主题做了一些研究,请阅读以下内容 documentationQuestion on StackOverflowQuestion on StackOverflow以及其他许多人,但我找不到问题。

模板

{% extends 'base.html'%}
{% load staticfiles %}
{% block content%}
{% load bootstrap %}

<div class = "signup-box">
    <h2>Sign up</h2>
    <form class="form-horizontal" action="signup" method="post">
        {% csrf_token %}
        <!-- {{ form|bootstrap }} -->

        {{ form.username.label }}
        {{ form.username }}
        {{ form.first_name.label }}
        {{ form.first_name }}
        {{ form.last_name.label }}
        {{ form.last_name }}
        {{ form.email.label }}
        {{ form.email }}
        {{ form.password1.label }}
        {{ form.password1 }}
        {{ form.password2.label }}
        {{ form.password2 }}<br>    
        <input type="submit" value="Submit" />
    </form>
</div>

{% endblock  %}

urls.py

from django.conf.urls import url
from . import views
urlpatterns = [
    url(r'^$', views.home),
    url(r'^login/$', views.login, name='login'),
    url(r'^signup/$', views.signup, name='signup'),

]

Views.py

from django.shortcuts import render, redirect
from .forms import RegistrationForm
from .models import User
from django.contrib import messages
from django.http import HttpResponse
# Create your views here.

def register_page(request):
    if request.method == "POST":
        form = RegistrationForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponse('<h1>The form is valid!<h1>')
        else:
            form = RegistrationForm(request.POST)
            args = {'form':form}
            return render(request, 'signup', args)
    else:
        form = RegistrationForm()
        return render(request, 'signup.html', {'form': form})

提交表单后出现以下错误

The current path, register_page/register_page/signup, didn't match any of these.

1 个答案:

答案 0 :(得分:1)

问题是您要发布到的网址。你的表单的动作是一个相对的路径,&#34;注册&#34 ;;因为它没有前导斜杠,所以它将始终附加到当前路径。

你可以通过预先设置斜杠来解决这个问题,但实际上你不应该这样做;您应该发布到您来自的相同网址,因此action="."

请注意,您的代码存在各种其他错误,尤其是如果验证失败,您不必要地重新实例化该表单,因此您永远不会看到任何验证错误。