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:
đš 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 %}