Функция add_message

Функция add_message применяется для добавления сообщений в систему уведомлений Django. Сообщения сохраняются в сессии пользователя и отображаются при следующем рендеринге шаблона. Функция принимает объект запроса, уровень важности сообщения, текст сообщения и дополнительные параметры. Уровни важности определяются константами модуля messages.

Синтаксис

pythonfrom django.contrib import messages

messages.add_message(request, level, message, extra_tags='', fail_silently=False)

Параметры

Функция принимает следующие параметры:

Пример

Добавим успешное сообщение после сохранения статьи в базе данных:

pythonfrom django.contrib import messages
from django.shortcuts import redirect
from myapp.models import Article

def create_article(request):
  if request.method == 'POST':
    title = request.POST.get('title')
    content = request.POST.get('content')
    article = Article.objects.create(
      title=title,
      content=content
    )
    messages.add_message(
      request,
      messages.SUCCESS,
      'Article created successfully'
    )
    return redirect('article_list')
  return render(request, 'article_form.html')

Пример

Добавим сообщение об ошибке с дополнительными CSS-классами:

pythonfrom django.contrib import messages
from django.shortcuts import redirect

def delete_article(request, pk):
  try:
    article = Article.objects.get(pk=pk)
    article.delete()
    messages.add_message(
      request,
      messages.SUCCESS,
      'Article deleted successfully'
    )
  except Article.DoesNotExist:
    messages.add_message(
      request,
      messages.ERROR,
      'Article not found',
      extra_tags='danger'
    )
  return redirect('article_list')

Пример

Добавим информационное сообщение с использованием встроенных функций-обёрток:

pythonfrom django.contrib import messages
from django.shortcuts import redirect

def update_article(request, pk):
  if request.method == 'POST':
    try:
      article = Article.objects.get(pk=pk)
      article.title = request.POST.get('title')
      article.save()
      messages.success(
        request,
        'Article updated successfully'
      )
    except Article.DoesNotExist:
      messages.error(
        request,
        'Article not found for update'
      )
    return redirect('article_detail', pk=pk)
  return render(request, 'article_form.html')

Пример

Получим все сообщения для отображения в шаблоне:

pythonfrom django.contrib import messages

def show_messages(request):
  storage = messages.get_messages(request)
  res = []
  for message in storage:
    res.append({
      'level': message.level,
      'message': message.message,
      'tags': message.tags
    })
  return render(request, 'messages.html', {'messages': res})

Результат выполнения кода:

python[
  {'level': 25, 'message': 'Article created successfully', 'tags': 'success'},
  {'level': 40, 'message': 'Article not found', 'tags': 'error danger'}
]

Смотрите также

  • функция success,
    которая добавляет успешное сообщение
  • функция error,
    которая добавляет сообщение об ошибке
  • функция info,
    которая добавляет информационное сообщение
  • функция get_messages,
    которая получает все сообщения из хранилища