在我的Django项目中,当用户发送GET请求时,我会显示一个表单。
这是此代码:
form = SignUpForm()
if request.method == 'POST':
....
else:
return render(request,'users/signup.html',{'form': form})
为此的HTML
<form method="POST" class="signupform">
{% csrf_token %}
{% for field in form %}
<div class="fields">{{ field }}</div>
{{ field.errors }}
<br>
{% endfor %}
<input class="submitButton" type="submit" value="Sign Up">
</form>
如果用户发送了发布请求,则我设置form = SignUpForm(request.POST)
并检查是否存在与其他用户名相同的用户。发生这种情况时,我想再次渲染整个页面,包括表单字段,并显示错误消息。
这是我当前的代码:
try:
user = User.objects.get(username=form.cleaned_data['username'])
return render(request,{'error': 'username field has already been taken','form':form})
except User.DoesnotExist:
...
HTML:
{% if error %}
<form method="POST" class="signupform">
{% csrf_token %}
{% for field in form %}
<div class="fields">{{ field }}</div>
{{ field.errors }}
<br>
{% endfor %}
<input class="submitButton" type="submit" value="Sign Up">
</form>
{{ error }}
{% endif %}
但是,当发生此错误时,会显示错误消息,但是屏幕上没有显示任何表单字段。他们消失了。有人知道这个问题吗?谢谢。
更新的代码:
context = []
if request.method == 'POST':
form = SignUpForm(request.POST)
if form.is_valid():
if not form.cleaned_data['password'] == form.cleaned_data['confirmPassword']:
context["error"] = 'username field has already been taken'
else:
raise Http404
else:
form = SignUpForm()
context['form'] = form
return render(request,context)