Fixed #21421 -- Added level_tag attribute on messages.
Exposing the level name (e.g. "info") makes it possible to prepend something to the class name. For example, Twitter Bootstrap has an alert-info class. This class can now be added to the message using `class="alert-{{ message.level_tag }}". Because the level_tag was on the end of the `tags` property, it could not be used in this fashion when extra_tags were given.
This commit is contained in:
parent
f67cce0434
commit
d87127655f
|
@ -40,18 +40,20 @@ class Message(object):
|
|||
return force_text(self.message)
|
||||
|
||||
def _get_tags(self):
|
||||
label_tag = force_text(LEVEL_TAGS.get(self.level, ''),
|
||||
strings_only=True)
|
||||
extra_tags = force_text(self.extra_tags, strings_only=True)
|
||||
if extra_tags and label_tag:
|
||||
return ' '.join([extra_tags, label_tag])
|
||||
if extra_tags and self.level_tag:
|
||||
return ' '.join([extra_tags, self.level_tag])
|
||||
elif extra_tags:
|
||||
return extra_tags
|
||||
elif label_tag:
|
||||
return label_tag
|
||||
elif self.level_tag:
|
||||
return self.level_tag
|
||||
return ''
|
||||
tags = property(_get_tags)
|
||||
|
||||
@property
|
||||
def level_tag(self):
|
||||
return force_text(LEVEL_TAGS.get(self.level, ''), strings_only=True)
|
||||
|
||||
|
||||
class BaseStorage(object):
|
||||
"""
|
||||
|
|
|
@ -361,6 +361,15 @@ class BaseTests(object):
|
|||
['info', '', 'extra-tag debug', 'warning', 'error',
|
||||
'success'])
|
||||
|
||||
def test_level_tag(self):
|
||||
storage = self.get_storage()
|
||||
storage.level = 0
|
||||
add_level_messages(storage)
|
||||
tags = [msg.level_tag for msg in storage]
|
||||
self.assertEqual(tags,
|
||||
['info', '', 'debug', 'warning', 'error',
|
||||
'success'])
|
||||
|
||||
@override_settings_tags(MESSAGE_TAGS={
|
||||
constants.INFO: 'info',
|
||||
constants.DEBUG: '',
|
||||
|
|
|
@ -212,6 +212,32 @@ is a mapping of the message level names to their numeric value::
|
|||
</ul>
|
||||
{% endif %}
|
||||
|
||||
The ``Message`` class
|
||||
---------------------
|
||||
|
||||
.. class:: storage.base.Message
|
||||
|
||||
When you loop over the list of messages in a template, what you get are
|
||||
instances of the ``Message`` class. It's quite a simple object, with only a
|
||||
few attributes:
|
||||
|
||||
* ``message``: The actual text of the message.
|
||||
|
||||
* ``level``: An integer describing the type of the message (see the
|
||||
`message levels`_ section above).
|
||||
|
||||
* ``tags``: A string combining all the message's tags (``extra_tags`` and
|
||||
``level_tag``) separated by spaces.
|
||||
|
||||
* ``extra_tags``: A string containing custom tags for this message,
|
||||
separated by spaces. It's empty by default.
|
||||
|
||||
.. versionadded:: 1.7
|
||||
|
||||
* ``level_tag``: The string representation of the level. By default, it's
|
||||
the lowercase version of the name of the associated constant, but this
|
||||
can be changed if you need by using the :setting:`MESSAGE_TAGS` setting.
|
||||
|
||||
Creating custom message levels
|
||||
------------------------------
|
||||
|
||||
|
|
|
@ -221,6 +221,10 @@ Minor features
|
|||
* The :ref:`messages context processor <message-displaying>` now adds a
|
||||
dictionary of default levels under the name ``DEFAULT_MESSAGE_LEVELS``.
|
||||
|
||||
* :class:`~django.contrib.messages.storage.base.Message` objects now have a
|
||||
``level_tag`` attribute that contains the string representation of the
|
||||
message level.
|
||||
|
||||
:mod:`django.contrib.redirects`
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
|
|
Loading…
Reference in New Issue