Функция get_messages
Функция get_messages применяется к объекту запроса и возвращает итератор по всем сообщениям, хранящимся в текущей сессии или в хранилище сообщений запроса. Сообщения представлены объектами класса Message, которые содержат уровень важности, само сообщение и дополнительные теги для оформления. Функция принимает один обязательный аргумент - объект запроса, и возвращает коллекцию сообщений, которые были добавлены ранее в процессе обработки запроса.
Синтаксис
from django.contrib.messages import get_messages
messages = get_messages(request)
Пример . Использование в представлении
Давайте получим все сообщения из хранилища запроса в представлении:
from django.contrib import messages
from django.contrib.messages import get_messages
from django.shortcuts import render, redirect
def my_view(request):
# Добавляем несколько сообщений разных уровней
messages.success(request, "Операция выполнена успешно")
messages.warning(request, "Возможны проблемы с производительностью")
messages.error(request, "Произошла ошибка валидации")
# Получаем все сообщения из хранилища
all_messages = get_messages(request)
# Выводим информацию о каждом сообщении
for message in all_messages:
print(f"Уровень: {message.level}")
print(f"Сообщение: {message.message}")
print(f"Теги: {message.tags}")
print("---")
return render(request, "my_template.html")
Результат выполнения кода:
"Уровень: 25"
"Сообщение: Операция выполнена успешно"
"Теги: success"
"---"
"Уровень: 30"
"Сообщение: Возможны проблемы с производительностью"
"Теги: warning"
"---"
"Уровень: 40"
"Сообщение: Произошла ошибка валидации"
"Теги: error"
"---"
Пример . Использование в шаблоне
Чаще всего функция get_messages используется в представлениях для передачи сообщений в шаблон. Рассмотрим пример с передачей сообщений в контекст:
from django.contrib import messages
from django.contrib.messages import get_messages
from django.shortcuts import render
def article_list(request):
# Добавляем информационное сообщение
messages.info(request, "Показаны все доступные статьи")
# Получаем все сообщения для передачи в шаблон
messages_list = get_messages(request)
context = {
"messages_list": messages_list,
}
return render(request, "articles/list.html", context)
Пример . Обработка сообщений из сессии
Функция get_messages также позволяет получить сообщения, которые были сохранены в сессии после редиректа:
from django.contrib import messages
from django.contrib.messages import get_messages
from django.shortcuts import redirect, render
def create_article(request):
if request.method == "POST":
# Добавляем сообщение перед редиректом
messages.success(request, "Статья успешно создана")
return redirect("articles:list")
def articles_list(request):
# Получаем сообщения после редиректа
messages_list = get_messages(request)
# Проверяем наличие сообщений
if messages_list:
first_message = messages_list[0]
print(f"Уровень: {first_message.level}")
print(f"Сообщение: {first_message.message}")
return render(request, "articles/list.html")
Результат выполнения кода:
"Уровень: 25"
"Сообщение: Статья успешно создана"
Пример . Работа с уровнями сообщений
Функция get_messages возвращает сообщения с различными уровнями важности. Можно фильтровать сообщения по их уровню:
from django.contrib import messages
from django.contrib.messages import get_messages, constants
from django.shortcuts import render
def messages_demo(request):
# Добавляем сообщения разных уровней
messages.debug(request, "Отладочное сообщение")
messages.info(request, "Информационное сообщение")
messages.success(request, "Успешная операция")
messages.warning(request, "Предупреждение")
messages.error(request, "Критическая ошибка")
# Получаем все сообщения
all_messages = get_messages(request)
# Отделяем информационные сообщения от сообщений с ошибками
info_messages = []
error_messages = []
for msg in all_messages:
if msg.level >= constants.ERROR:
error_messages.append(msg.message)
elif msg.level >= constants.INFO:
info_messages.append(msg.message)
print(f"Информационные сообщения: {info_messages}")
print(f"Сообщения об ошибках: {error_messages}")
return render(request, "demo.html")
Результат выполнения кода:
"Информационные сообщения: ['Отладочное сообщение', 'Информационное сообщение', 'Успешная операция', 'Предупреждение']"
"Сообщения об ошибках: ['Критическая ошибка']"
Пример . Использование с пользовательской обработкой
Функция get_messages полезна для создания пользовательской логики отображения сообщений, например, для группировки по уровням:
from django.contrib import messages
from django.contrib.messages import get_messages
from django.shortcuts import render
def articles_dashboard(request):
# Добавляем несколько сообщений
messages.info(request, "Загружено 5 статей")
messages.success(request, "Последняя статья обновлена")
messages.warning(request, "В очереди на обработку 3 статьи")
# Получаем все сообщения для анализа
messages_list = get_messages(request)
# Создаем структурированный словарь сообщений по уровням
messages_by_level = {}
for message in messages_list:
level_name = message.level
if level_name not in messages_by_level:
messages_by_level[level_name] = []
messages_by_level[level_name].append(message.message)
# Выводим статистику по сообщениям
for level, msgs in messages_by_level.items():
print(f"Уровень {level}: {len(msgs)} сообщений")
context = {
"messages_by_level": messages_by_level,
}
return render(request, "dashboard.html", context)
Результат выполнения кода:
"Уровень 20: 1 сообщений"
"Уровень 25: 1 сообщений"
"Уровень 30: 1 сообщений"
Смотрите также
-
функция
add_message,
которая добавляет сообщение в хранилище запроса -
функция
success,
которая добавляет сообщение об успешной операции -
функция
error,
которая добавляет сообщение об ошибке -
функция
warning,
которая добавляет предупреждающее сообщение