Обработка форма
Есть форма в модальном окне (Bootstrap), которая подключается в шаблоны всех страниц. Она может быть открыта на любой странице. Как наладить взаимодействие views и этого модального окна? Это взаимодействие налажено только в одну сторону — views принимает информацию из формы, валидирует ее в forms.py и отправляет на почту. Как настроить редирект, чтобы остаться на текущей странице и, возможно, с открытой формой? Как отдавать ошибки серверной валидации в форму?
views.py
def submit(request):
if request.method == "POST":
form = SubscribeForm(request.POST)
if form.is_valid():
name = form.cleaned_data['name']
phone = form.cleaned_data['phone']
email = form.cleaned_data['email']
mail = send_mail('subject', 'message', 'sender', ['reciever'], fail_silently=False)
if mail:
messages.success(request, f'Письмо отправлено!')
return redirect(???)
else:
messages.error(request, 'Ошибка отправки')
return redirect(???)
else:
messages.error(request, 'Ошибка регистрации')
return redirect(???)
modal.html
<form method="post" action="{% url 'submit' %}" id="subscribe_form" class="needs-validation container" novalidate>
{% csrf_token %}
{{ form.non_field_errors }}
<div class="modal-body">
<div class="md-form mb-5">
{{ post_form.name.errors }}
<i class="fas fa-user prefix grey-text"></i>
<input type="text" id="name" class="form-control" value="" required/>
<label for="name">Ваше имя</label>
<div class="valid-feedback">Отлично!</div>
<div class="invalid-feedback">Поле не должно быть пустым.</div>
</div>
<div class="md-form mb-5">
{{ post_form.name.errors }}
<i class="fas fa-phone prefix grey-text"></i>
<input type="text" id="phone" class="form-control" value="" required/>
<label for="phone">Ваш телефон</label>
<div class="valid-feedback">Отлично!</div>
<div class="invalid-feedback">Поле не должно быть пустым.</div>
</div>
<div class="md-form">
{{ post_form.email.errors }}
<i class="fas fa-envelope prefix grey-text"></i>
<input class="form-control" type="email" value="" id="email" required>
<label class="form-check-label" for="email">Ваш e-mail</label>
<div class="valid-feedback">Отлично!</div>
<div class="invalid-feedback">Введите правильный e-mail</div>
</div>
</div>
<div class="modal-footer justify-content-center">
<button type="submit" class="btn btn-outline-blue-grey waves-effect">Записаться <i
class="fas fa-paper-plane-o ml-1"></i></button>
</div>
</form>