1

Is it possible to check if a django message and contents exist before adding another message?

In my example I am peforming a try - except in a loop, and if an exception occurs I add a message, but I only want the message to appear once, not for each item in the loop:

for i in data:
    # do something...
    try:
        # try to act upon something
    except:
        # failed action add a message
        if not messages.?.contains("Error: Unable to perform action X")
            messages.add_message(request, messages.ERROR, 'Error: Unable to perform action X')
        pass
cezar
  • 11,616
  • 6
  • 48
  • 84
AlexW
  • 2,843
  • 12
  • 74
  • 156

1 Answers1

5

You are looking for messages.get_messages(request) method.

To get the list of all messages, wrap that method call within list constructor:

all_messages = list(messages.get_messages(request))

Each message object has information about its level, message itself etc. You can use that fields to check if message you are searching for already exists.

Simple snippet:

all_error_messages_content = [msg.message for msg in list(messages.get_messages(request)) if msg.level_tag == 'error']
if 'Error: Unable to perform action X' not in all_error_messages_content:
     messages.add_message(request, messages.ERROR, 'Error: Unable to perform action X')
Szymon P.
  • 1,008
  • 7
  • 11