РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
382 of 818 menu

Функция 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,
    которая добавляет предупреждающее сообщение
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить