我正在为用户注册页面。除了引入的表格有错误之外,该过程还可以正常工作。按下signup
按钮后,页面重定向到login
并显示一条通知,提示username or password mismatch
。如果有任何错误,这是我在login
页中引入的通知。
在views.py
内
def signup(request):
if request.method=='POST':
form =SignupForm(request.POST)
if form.is_valid():
form.save()
return redirect('login')
else:
error=form.errors
return render(request,'registration/signup.html',{'error':error})
#return redirect('signup',{'error':error})
else:
form = SignupForm()
return render(request,'registration/signup.html',{'form':form})
我的signup.html
模板是:
{% extends 'blog/base.html' %}
{% block content %}
<h2>Sign up</h2>
<form method="post" action="{% url 'login' %}">
{% csrf_token %}
{% if form.errors %}
<h1>Error {{error}}</h1>
{{ error }}
{% endif %}
{{ form.as_p }}
<button type="submit">Sign up</button>
</form>
{% endblock %}
path('signup/',views.signup,name='signup')
path('accounts/login/',LoginView.as_view(), name='login')
注册表单为:
class SignupForm(UserCreationForm):
first_name=forms.CharField(label="First Name",widget=forms.TextInput(attrs={'placeholder': 'First Name'}))
last_name=forms.CharField(label='Last Name')
#Removes the help_texts
def __init__(self, *args, **kwargs):
super(SignupForm, self).__init__(*args, **kwargs)
self.fields['password1'].help_text = None
class Meta:
model=User
fields=('first_name','last_name','username','email','password1','password2')
为什么会这样?如何向用户呈现相同的注册页面以及显示错误的更多信息。像**some_error** happened. Please fill out the form again
。为什么该页面在每种情况下都重定向到登录页面,为什么当本应在同一页面中显示错误时为什么在登录页面上显示错误?
答案 0 :(得分:1)
def signup(request):
if request.method=='POST':
form =SignupForm(request.POST)
if form.is_valid():
form.save()
return redirect('login')
else:
form = SignupForm()
return render(request,'registration/signup.html',{'form':form})
只需使其像最终的return(return(your main template))
。无论何时,它将每次都加载表格。
注意-删除action="{% url%}
。这就是为什么您每次都只进入login
页的原因。
答案 1 :(得分:0)
您应将{{ error }}
放入for循环中,如下所示:
{% if form.errors %}
{% for error in form.errors %}
<h1>Error {{error}}</h1>
{{ error }}
{% endfor %}
{% endif %}
答案 2 :(得分:0)
最后一个渲染返回必须与if语句一致;您的标签的位置太过分了。这样做:
def signup(request):
form = SignupForm()
if request.method=='POST':
form =SignupForm(request.POST)
if form.is_valid():
form.save()
return redirect('login')
else:
error=form.errors
return render(request,'registration/signup.html',{'error':error})
return render(request,'registration/signup.html',{'form':form})