В моем проекте 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, 'users/signup.html', {'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, 'users/signup.html', context)