Django django.contrib.messages добавляет новую константу messages.NOTICE
Как создать новую константу для сообщений Django?
Я хочу добавить новую константу messages.NOTICE
в дополнение к существующим шести константам. С ее помощью я могу отображать уведомления с помощью Bootstrap CSS.
# settings.py
from django.contrib.messages import constants as messages
MESSAGE_TAGS = {
messages.DEBUG: 'alert-secondary',
messages.INFO: 'alert-info',
messages.SUCCESS: 'alert-success',
messages.WARNING: 'alert-warning',
messages.ERROR: 'alert-danger',
#messages.NOTICE: 'alert-primary', #To add
}
Вы не можете добавлять новые уровни в коллекцию messages
. На самом деле вам не нужно добавлять его куда-либо, если все, что вам нужно, это чтобы уровень существовал, вы просто должны передать его в метод add_message
- но чтобы CSS-часть сообщений работала, вы должны добавить его в MESSAGES_TAGS
в settings.py
.
Уровни сообщений - это просто целые числа. Это означает, что вы можете складывать целые числа напрямую, или вы можете сделать константу для этого, если хотите, я покажу оба варианта ниже.
# settings.py
from django.contrib.messages import constants as messages
NOTICE: 60 # Or some other integer
MESSAGE_TAGS = {
messages.DEBUG: 'alert-secondary',
messages.INFO: 'alert-info',
messages.SUCCESS: 'alert-success',
messages.WARNING: 'alert-warning',
messages.ERROR: 'alert-danger',
NOTICE: 'alert-primary',
80: 'alert-tertiary',
}
# elsewhere.py
from django.contrib import messages
messages.add_message(request, 60, "Hello world.") # Would trigger the `NOTICE` CSS class from `MESSAGE_TAGS`
Если вы хотите унифицировать удобство передачи констант в вызовы сообщений, создайте пользовательскую коллекцию (enum
или Django *Choice
-класс) на основе исходных констант:
# constants.py
from django.contrib.messages import constants as message_constants
from django.db import models
class MessageLevels(models.IntegerChoices):
DEBUG = message_constants.DEBUG,
INFO = message_constants.INFO,
[...] # repeat for the standard levels
NOTICE = 60
CRITICAL = 90
# elsewhere.py
from ./constants import MessageLevels as msg
messages.add_message(request, msg.NOTICE, "Hello world.")
messages.add_message(request, msg.DEBUG, "Hello debugger.")
Как было отмечено изначально - не забудьте также добавить пользовательские целые числа из коллекции уровней сообщений в MESSAGE_TAGS
, иначе не будет никакого CSS passthrough. Вы можете (и, вероятно, должны) использовать коллекцию и для этого:
# settings.py
from ./constants import MessageLevels as msg
MESSAGE_TAGS = {
messages.DEBUG: 'alert-secondary',
messages.INFO: 'alert-info',
messages.SUCCESS: 'alert-success',
messages.WARNING: 'alert-warning',
messages.ERROR: 'alert-danger',
msg.NOTICE, 'alert-primary',
msg.CRITICAL, 'alert-tertiary',
}