Сообщения Django не отображают сообщение
Я пытаюсь использовать django messages для уведомления пользователя об успешной или неуспешной отправке формы. Но ничего не появляется, когда я отправляю форму, независимо от того, что происходит. Я просмотрел код views.py и шаблон и, похоже, ничего не напутал. Я даже пробовал изменить бэкенд-хранилище сообщений по умолчанию на сессию, но ничего не вышло.
MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'
views.py:
from django.shortcuts import render, HttpResponse, HttpResponseRedirect, redirect
from django.contrib import messages
from .forms import MyUserCreationForm
import bcrypt
def register(request):
if request.method == "POST":
# Populate form using submitted data
form = MyUserCreationForm(request.POST)
if form.is_valid():
# Clone form model
user = form.save(commit=False)
password = user.password
# Validate password length
if len(password) > 25:
messages.error(
request, "PASSWORD MUST BE LESS THAN OR EQUAL TO 25 CHARACTER LENGTH")
# Hash user password
bytes = password.encode('utf-8')
salt = bcrypt.gensalt()
hash = bcrypt.hashpw(bytes, salt)
# Save modified form to database
user.password = hash
user.save()
messages.success(request, "ACCOUNT CREATED SUCCESSFULLY!")
messages.add_message(request, messages.INFO,
'Thanks for reaching out! We will be in contact soon!',
extra_tags='ex-tag')
return redirect('register')
# Create empty form
form = MyUserCreationForm()
return render(request, 'register.html', {'form': form})
templates/register.html:
{% extends "layout.html" %}
{% block title %}
Testing Registration
{% endblock %}
{% load static %}
{% load crispy_forms_tags %}
{% block main %}
<div class="container p-2 px-4 p-md-3">
<div class="container-fluid p-0" style="height: 40px;"></div>
</div>
<div class="container">
<div class="mx-auto ">
<form method="POST" action="/register/">
{% csrf_token %}
{{ form | crispy }}
<input type="submit" value="Submit" class="btn btn-primary mb-3">
</form>
{% if messages %}
{% for message in messages %}
<div class="alert alert-danger d-flex align-items-center alert-dismissible fade show" role="alert">
<svg class="bi flex-shrink-0 me-2" role="img" aria-label="Danger:">
<use xlink:href="#exclamation-triangle-fill" />
</svg>
<div>
{{ message }}
</div>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
{% endfor %}
{% endif %}
</div>
</div>
{% endblock %}
settings.py:
Документация:
Если вы используете контекстный процессор, ваш шаблон должен быть отображаться с помощью RequestContext. В противном случае, убедитесь, что сообщения доступны для контекста шаблона.
https://docs.djangoproject.com/en/4.1/ref/contrib/messages/#displaying-messages
вы не отправляете сообщения или RequestContext в вашем контексте:
return render(request, 'register.html', {'form': form})
Пожалуй, это должно быть что-то вроде этого:
return render(request, 'register.html', {'form': form, 'messages':get_messages(request)})