Почему я не получаю никакой обратной связи о том, правильно или неправильно заполнена моя форма? 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 вместо этого.

Вернуться на верх