diff --git a/django/contrib/messages/constants.py b/django/contrib/messages/constants.py index bf83bfa13b0..b43144872ca 100644 --- a/django/contrib/messages/constants.py +++ b/django/contrib/messages/constants.py @@ -11,3 +11,11 @@ DEFAULT_TAGS = { WARNING: 'warning', ERROR: 'error', } + +DEFAULT_LEVELS = { + 'DEBUG': DEBUG, + 'INFO': INFO, + 'SUCCESS': SUCCESS, + 'WARNING': WARNING, + 'ERROR': ERROR, +} diff --git a/django/contrib/messages/context_processors.py b/django/contrib/messages/context_processors.py index 26cbcd5853e..bf3f0831086 100644 --- a/django/contrib/messages/context_processors.py +++ b/django/contrib/messages/context_processors.py @@ -1,8 +1,12 @@ from django.contrib.messages.api import get_messages +from django.contrib.messages.constants import DEFAULT_LEVELS def messages(request): """ Returns a lazy 'messages' context variable. """ - return {'messages': get_messages(request)} + return { + 'messages': get_messages(request), + 'DEFAULT_MESSAGE_LEVELS': DEFAULT_LEVELS, + } diff --git a/django/contrib/messages/tests/base.py b/django/contrib/messages/tests/base.py index b247362e1b6..648ec4c221b 100644 --- a/django/contrib/messages/tests/base.py +++ b/django/contrib/messages/tests/base.py @@ -4,6 +4,7 @@ from django import http from django.conf import settings, global_settings from django.contrib.messages import constants, utils, get_level, set_level from django.contrib.messages.api import MessageFailure +from django.contrib.messages.constants import DEFAULT_LEVELS from django.contrib.messages.storage import default_storage, base from django.contrib.messages.storage.base import Message from django.core.urlresolvers import reverse @@ -189,6 +190,13 @@ class BaseTests(object): for msg in data['messages']: self.assertNotContains(response, msg) + def test_context_processor_message_levels(self): + show_url = reverse('django.contrib.messages.tests.urls.show_template_response') + response = self.client.get(show_url) + + self.assertTrue('DEFAULT_MESSAGE_LEVELS' in response.context) + self.assertEqual(response.context['DEFAULT_MESSAGE_LEVELS'], DEFAULT_LEVELS) + @override_settings(MESSAGE_LEVEL=constants.DEBUG) def test_multiple_posts(self): """ diff --git a/docs/ref/contrib/messages.txt b/docs/ref/contrib/messages.txt index c1995b6d39a..caf51d26cc6 100644 --- a/docs/ref/contrib/messages.txt +++ b/docs/ref/contrib/messages.txt @@ -196,6 +196,22 @@ Even if you know there is only just one message, you should still iterate over the ``messages`` sequence, because otherwise the message storage will not be cleared for the next request. +.. versionadded:: 1.7 + +The context processor also provides a ``DEFAULT_MESSAGE_LEVELS`` variable which +is a mapping of the message level names to their numeric value:: + + {% if messages %} +
+ {% endif %} + Creating custom message levels ------------------------------ diff --git a/docs/releases/1.7.txt b/docs/releases/1.7.txt index 13db17cbd45..784ee864939 100644 --- a/docs/releases/1.7.txt +++ b/docs/releases/1.7.txt @@ -203,6 +203,9 @@ Minor features follow the :setting:`SESSION_COOKIE_SECURE` and :setting:`SESSION_COOKIE_HTTPONLY` settings. +* The :ref:`messages context processor + {% endfor %} +