В этом уроке вы узнаете, как использовать флэш-сообщения Django в Python, включая их создание и отображение.
Что такое флэш-сообщения Django?
Флэш-сообщение — это одноразовое уведомление. Чтобы отобразить флэш-сообщение в Django, используйте сообщения из модуля django.contrib:
from django.contrib import messages
Сообщения имеют несколько полезных функций для отображения информации, предупреждений и сообщений об ошибках:
- messages.debug – отображает отладочное сообщение.
- messages.info – отображает информационное сообщение.
- messages.success – сообщение об успешном выполнении.
- messages.warning – выводится предупреждающее сообщение.
- messages.error – выводит сообщение об ошибке.
Все эти функции принимают объект HttpRequest в качестве первого аргумента и message в качестве второго аргумента.
Пример сообщения Django Flash
Мы реализуем флэш-сообщения для приложения блога в django_project.
Создание флэш-сообщений Django
Измените функцию create_post(), добавив флэш-сообщения:
from django.shortcuts import render,redirect
from django.contrib import messages
from .models import Post
from .forms import PostForm
def create_post(request):
if request.method == 'GET':
context = {'form': PostForm()}
return render(request,'blog/post_form.html',context)
elif request.method == 'POST':
form = PostForm(request.POST)
if form.is_valid():
form.save()
messages.success(request, 'The post has been created successfully.')
return redirect('posts')
else:
messages.error(request, 'Please correct the following errors:')
return render(request,'blog/post_form.html',{'form':form})
Как это работает.
- Сначала импортируем сообщения из django.contrib:
from django.contrib import messages
- Во-вторых, создайте сообщение об успешном выполнении после сохранения значений формы в базе данных, вызвав функцию success():
messages.success(request, 'The post has been created successfully.')
- В-третьих, создайте сообщение об ошибке, если форма недопустима, вызвав функцию error():
messages.error(request, 'Please correct the following errors:')
Отображение флэш-сообщений
Измените шаблон base.html для отображения флэш-сообщений:
{%load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="https://copython.ru/{% static"css/style.css' %}" />
<script src="https://copython.ru/{% static"js/app.js' %}" defer></script>
<title>My Site</title>
</head>
<body>
{% if messages %}
<div class="messages">
{% for message in messages %}
<div class="alert {% if message.tags %}alert-{{ message.tags }}"{% endif %}>
{{ message }}
</div>
{% endfor %}
</div>
{% endif %}
{%block content%}
{%endblock content%}
</body>
</html>
Если вы перейдете к форме http://127.0.0.1/post/create, введите значения и нажмите кнопку «Save»:

… вы увидите сообщение об успешном выполнении:

Если вы обновите страницу, сообщение исчезнет, поскольку оно отображается только один раз.
Если вы пропустите ввод значения в поле заголовка и нажмете кнопку «Save»:

… вы увидите сообщение об ошибке:

