Django-форма, отправляемая в одно и то же представление, а не в нужное представление
Моя форма перестала отправляться в нужное представление, а вместо этого отправляется в свое собственное представление.
URLS.PY:
path('validate_registration', views.validate_registration,name='validate_registration'),
VIEWS.PY:
def user_registration(request):
print("in reg")
# populate form
form = register_form(request.POST)
print("anonymous form")
template = loader.get_template('registration.html')
return HttpResponse(template.render({'form':form}, request))
def validate_registration(request):
if request.POST:
print("validating")
#populate form
form = register_form(request.POST)
return render(request, 'val_reg.html', {})
TEMPLATS.HTML:
<form class="text-warning text-center rounded pt-2 ps-2 pe-2" method="POST" action="{% url 'validate_registration' %}" >
{% csrf_token %}
{{form.as_p}}
<br/>
<button type="submit" class="btn btn-warning mt-5">Register</button>
<br/>
<br/>
</form>
Форма работала, но после изменения views.py она перестала работать, что заставило меня сократить ее код до нескольких строк. Даже строка print "in reg" не работает.
Помогите, пожалуйста
В вашем коде user_registration
представления вы создаете новый экземпляр формы с request.POST
данными, а затем отображаете его. Это нестандартно для сценария запроса GET
. Обычно вы создаете форму без данных (form = register_form()
) для запроса GET
, и с данными request.POST
для запроса POST
.
Кроме того, функция validate_registration
в вашем представлении заполняет форму request.POST
, но вы ничего не делаете с ней после этого.
Если вы хотите проверить данные формы, вам следует проверить, является ли форма действительной (form.is_valid()
), а затем перейти к следующему этапу.
Попробуйте это в своем views.py
:
def user_registration(request):
if request.method == 'POST':
form = register_form(request.POST)
if form.is_valid():
# Process the data in form.cleaned_data
# Redirect to a new URL, or handle the data
pass
else:
form = register_form()
return render(request, 'registration.html', {'form': form})
def validate_registration(request):
if request.method == 'POST':
form = register_form(request.POST)
if form.is_valid():
# Process valid data
return render(request, 'success_template.html', {})
else:
# Handle invalid form
return render(request, 'val_reg.html', {'form': form})