Django Messages

Display feedback notifications to users

đŸ’Ŧ What are Django Messages?

Django Messages framework provides temporary notifications to users after actions like form submissions or logins. Messages appear once and disappear after being displayed, perfect for success alerts and error notifications.


# Add a success message in your view
from django.contrib import messages

def my_view(request):
    messages.success(request, 'Profile updated successfully!')
    return redirect('profile')
                                    

Message Types

Django provides five built-in message levels to categorize different types of notifications. Each level has a specific purpose and can be styled differently in your templates for better user experience.

đŸŸĸ

Success

Confirm successful actions

messages.success(request, 'Done!')
â„šī¸

Info

General information messages

messages.info(request, 'Note this')
âš ī¸

Warning

Alert users about issues

messages.warning(request, 'Careful!')
🔴

Error

Show error notifications

messages.error(request, 'Failed!')

🔹 Enable Messages Framework

Messages are enabled by default in Django. Verify these settings:

# settings.py
INSTALLED_APPS = [
    'django.contrib.messages',  # Should be included
]

MIDDLEWARE = [
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',  # Required
]

TEMPLATES = [
    {
        'OPTIONS': {
            'context_processors': [
                'django.contrib.messages.context_processors.messages',  # Required
            ],
        },
    },
]

🔹 Add Messages in Views

Import messages and add them in your view functions:

# views.py
from django.contrib import messages
from django.shortcuts import render, redirect

def update_profile(request):
    if request.method == 'POST':
        # Process form data
        user = request.user
        user.email = request.POST.get('email')
        user.save()
        
        # Add success message
        messages.success(request, 'Your profile has been updated!')
        return redirect('profile')
    
    return render(request, 'profile.html')

def delete_post(request, post_id):
    # Delete logic here
    messages.warning(request, 'Post deleted permanently!')
    return redirect('home')

def login_view(request):
    # Login logic
    if user_authenticated:
        messages.info(request, f'Welcome back, {user.username}!')
    else:
        messages.error(request, 'Invalid credentials. Please try again.')
    return redirect('dashboard')

🔹 Display Messages in Templates

Show messages in your base template so they appear on all pages:

<!-- templates/base.html -->
{% if messages %}
    <div class="messages">
        {% for message in messages %}
            <div class="alert alert-{{ message.tags }}">
                {{ message }}
            </div>
        {% endfor %}
    </div>
{% endif %}

Output:

✓ Your profile has been updated!
⚠ Post deleted permanently!

🔹 Style Messages with CSS

Add custom styles for different message types:

/* static/css/messages.css */
.messages {
    margin: 20px 0;
}

.alert {
    padding: 15px;
    margin-bottom: 10px;
    border-radius: 4px;
    border: 1px solid transparent;
}

.alert-success {
    background-color: #d4edda;
    border-color: #c3e6cb;
    color: #155724;
}

.alert-info {
    background-color: #d1ecf1;
    border-color: #bee5eb;
    color: #0c5460;
}

.alert-warning {
    background-color: #fff3cd;
    border-color: #ffeaa7;
    color: #856404;
}

.alert-error {
    background-color: #f8d7da;
    border-color: #f5c6cb;
    color: #721c24;
}

🔹 Advanced Message Usage

Use extra tags and check message levels:

# Add custom tags
messages.success(request, 'Saved!', extra_tags='dismissible')

# Add multiple messages
messages.info(request, 'Step 1 complete')
messages.info(request, 'Step 2 complete')
messages.success(request, 'All steps finished!')

# Check message level in template
{% for message in messages %}
    {% if message.level == DEFAULT_MESSAGE_LEVELS.ERROR %}
        <strong>Error:</strong>
    {% endif %}
    {{ message }}
{% endfor %}

🧠 Test Your Knowledge

Which message type should you use for successful form submissions?