Почему я не получаю никакой обратной связи о том, правильно или неправильно заполнена моя форма? Python, Django
Я работаю в Django с Python, и вот мой views.py
def register(request):
if request.method == "POST":
form = NewUserForm(request.POST)
if form.is_valid():
user = form.save()
auth_login(request, user)
print("success")
return render(request, 'Upload.html', {})
# messages.success(request, "Regisration successful.")
# print("hello")
return render(request, "Home.html")
else:
print(form.errors)
return render(request, 'Register.html', {'form': form})
form = NewUserForm()
return render(request, 'Register.html', context={"form":form})
Это мой HTML
{% extends 'base.html' %}
{% load static %}
{% block css %}
<link rel="stylesheet" href=" {% static 'website/Register.css' %} " media="screen">
{% endblock %}
{% block content %}
<section class="u-align-center u-clearfix u-section-1" id="sec-6951">
<div class="u-clearfix u-sheet u-sheet-1">
<div class="u-align-center u-form u-form-1">
<form action="#" method="POST" class="u-clearfix u-form-spacing-10 u-form-vertical u-inner-form" source="custom" name="form" style="padding: 10px;">
{% csrf_token %}
<div class="u-form-email u-form-group">
<label for="email-87f0" class="u-label">Email</label>
<input type="email" placeholder="Enter a valid email address" id="email-87f0" name="email" class="u-border-1 u-border-grey-30 u-input u-input-rectangle u-white" required="">
</div>
<div class="u-form-group u-form-name">
<label for="name-87f0" class="u-label">Username</label>
<input type="text" placeholder="Create a username" id="name-87f0"
name="username" class="u-border-1 u-border-grey-30 u-input u-input-rectangle u-white" required="">
</div>
<div class="u-form-group u-form-name u-form-group-3">
<label for="name-12e6" class="u-label">Password</label>
<input type="text" placeholder="Create a password" id="name-12e6" name="password1" class="u-border-1 u-border-grey-30 u-input u-input-rectangle u-white" required="">
</div>
<div class="u-form-group u-form-name u-form-group-4">
<label for="name-12e6" class="u-label">Verify Password</label>
<input type="text" placeholder="Verify your password" id="name-12e6" name="password2" class="u-border-1 u-border-grey-30 u-input u-input-rectangle u-white" required="">
</div>
<div class="u-align-center u-form-group u-form-submit">
<a href="#" class="u-btn u-btn-submit u-button-style">Create Account</a>
<input type="submit" value="submit" class="u-form-control-hidden">
</div>
<ul class="messages">
{{ messagez }} </li>
{{ form.errors }}
</form>
</div>
</div>
</section>
{% endblock %}}
Messagez и form.errors - это попытка вывести код на HTML. Я понятия не имею, как я могу заставить этот код отображаться в HTML. Я хочу, чтобы он говорил "Success" или отображал form.error
Рассмотрите возможность использования alert для отображения сообщения об ошибке в предполагаемом шаблоне.
Возможно, этот код в вашем шаблоне может сработать.
{% if messages %}
{% for message in messages %}
<div class="alert alert-{{ message.tags }} alert-dismissible fade show" role="alert">
{{ message }}
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
{% endfor %}
{% endif %}
Для получения более подробной информации обратитесь к документации https://docs.djangoproject.com/en/4.0/ref/contrib/messages/
Лучше и правильнее будет использовать FormView, чем реализовывать представление формы как представление на основе функций.
class RegisterView(FormView):
form_class = NewUserForm
template_name = "Register.html"
def form_valid(self, form):
user = form.save()
auth_login(self.request, user)
return redirect("/") # assuming that's the Home to redirect to
Вам также будет легче позволить Django создать вашу форму - он позаботится о печати ошибок, начальных значений, заполнителей и т.д.:
<form method="POST">
{% csrf_token %}
<table>
{{ form.as_table }}
</table>
<input type="submit" value="submit">
</form>
Вероятно, макет таблицы по умолчанию будет выглядеть не так, как вы хотите - популярным вариантом, помогающим в этом, является django-crispy-forms.
Я нашел ответ. Я просто позволил встроенному фреймворку Django взять на себя управление и удалил свой HTML. Слишком сложно запускать свои собственные вещи, и я использовал crispy вместо этого.