Функция error
Функция error применяется для регистрации сообщений
с уровнем ошибки в системе сообщений Django. Она принимает
объект запроса, строку сообщения и дополнительные аргументы.
Сообщения, добавленные через эту функцию, затем могут быть
отображены в шаблонах с помощью стандартных механизмов
вывода сообщений Django.
Синтаксис
from django.contrib import messages
messages.error(request, message, extra_tags='', fail_silently=False)
Параметры
Функция error принимает следующие параметры:
- ⁅b⁆request⁅/b⁆ - объект HTTP-запроса, обязательный параметр, через который передается хранилище сообщений
- ⁅b⁆message⁅/b⁆ - строка с текстом сообщения, обязательный параметр, который будет отображаться пользователю
- ⁅b⁆extra_tags⁅/b⁆ - необязательный параметр, строка с дополнительными CSS-классами для сообщения
- ⁅b⁆fail_silently⁅/b⁆ - необязательный параметр, булево значение, указывающее, нужно ли подавлять исключения при работе с хранилищем сообщений (по умолчанию False)
Пример . Использование в представлении
Давайте добавим сообщение об ошибке при попытке получить несуществующую запись из базы данных:
from django.shortcuts import render
from django.contrib import messages
from django.http import Http404
def article_detail(request, article_id):
try:
# Имитация попытки получить статью
if article_id > 100:
raise Http404("Article not found")
# Дальнейшая логика
return render(request, 'article.html')
except Http404:
messages.error(request, "Article not found. Please try again later.")
return render(request, 'error.html')
Результат выполнения кода:
"Message with ERROR level added to messages storage"
Пример . С дополнительными тегами
Рассмотрим пример использования параметра extra_tags
для добавления пользовательских CSS-классов к сообщению:
from django.contrib import messages
from django.shortcuts import render
def user_login(request):
# Проверка данных пользователя
username = request.POST.get('username')
password = request.POST.get('password')
if username == 'admin' and password == 'secret':
# Успешный вход
return render(request, 'dashboard.html')
else:
messages.error(
request,
"Invalid credentials. Please check your username and password.",
extra_tags='alert alert-danger'
)
return render(request, 'login.html')
Результат выполнения кода:
"Message with ERROR level and extra CSS classes: 'alert alert-danger'"
Пример . С отображением в шаблоне
Теперь рассмотрим, как отобразить сообщение об ошибке в шаблоне после его добавления в представлении:
# views.py
from django.contrib import messages
from django.shortcuts import render
def process_payment(request):
if not request.user.is_authenticated:
messages.error(request, "You must be logged in to process payment.")
return render(request, 'payment.html')
# Логика обработки платежа
return render(request, 'success.html')
Результат выполнения кода в представлении:
"Message added to request messages storage"
А в шаблоне можно вывести все сообщения следующим образом:
{% if messages %}
<div class="messages">
{% for message in messages %}
{% if message.tags == 'error' %}
<div class="alert alert-danger">
{{ message }}
</div>
{% endif %}
{% endfor %}
</div>
{% endif %}
Смотрите также
-
функция
success,
которая добавляет сообщение с уровнем SUCCESS -
функция
warning,
которая добавляет сообщение с уровнем WARNING -
функция
info,
которая добавляет сообщение с уровнем INFO -
функция
get_messages,
которая позволяет получить все сообщения из хранилища