Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1""" 

2 

3|alpha| 

4 

5Messages provide feedback to users as things happen within an application. The ``MessageMixin`` enables this feedback 

6for a view. 

7 

8""" 

9__author__ = "Shawn Davis <shawn@superdjango.com>" 

10__maintainer__ = "Shawn Davis <shawn@superdjango.com>" 

11__version__ = "1.2.0-a" 

12 

13# Imports 

14 

15from django.contrib import messages 

16 

17# Exports 

18 

19__all__ = ( 

20 "MessageAPIBinder", 

21 "MessageAPIWrapper", 

22 "MessageMixin", 

23) 

24 

25# Classes 

26 

27 

28class MessageAPIWrapper(object): 

29 """Wraps the ``django.contrib.messages.api`` module to capture the current request instance for function calls.""" 

30 

31 def __init__(self, request): 

32 """Initialize the wrapper. 

33 

34 :param request: The current HTTPRequest instance. 

35 

36 """ 

37 self.request = request 

38 

39 def debug(self, message): 

40 messages.debug(self.request, message) 

41 

42 def error(self, message): 

43 messages.error(self.request, message) 

44 

45 def info(self, message): 

46 messages.info(self.request, message) 

47 

48 def success(self, message): 

49 messages.success(self.request, message) 

50 

51 def warning(self, message): 

52 # noinspection PyUnresolvedReferences 

53 messages.warning(self.request, message) 

54 

55 

56class MessageAPIBinder(object): 

57 """Binds the ``MessageAPIWrapper`` to a view.""" 

58 

59 def __get__(self, instance, owner): 

60 return MessageAPIWrapper(instance.request) 

61 

62# Mixins 

63 

64 

65class MessageMixin(object): 

66 """Add a ``messages``` attribute on the view instance that wraps ``django.contrib.messages``. 

67 

68 Many HTML/CSS frameworks such as Twitter Bootstrap or UIKit have styles for ``info``, ``success``, and 

69 ``warning``, but use ``danger`` for the equivalent of ``error``. You can address this by adding the following to 

70 your ``settings.py`` file: 

71 

72 .. code-block:: python 

73 

74 from django.contrib import messages 

75 

76 # Map "error" to "danger" for Bootstrap/UIKit alerts. 

77 from django.contrib.messages import constants as messages 

78 MESSAGE_TAGS = { 

79 messages.ERROR: "danger", 

80 } 

81 

82 See https://docs.djangoproject.com/en/stable/ref/contrib/messages/ 

83 

84 """ 

85 messages = MessageAPIBinder()