Index: django/utils/safestring.py
===================================================================
--- django/utils/safestring.py	(revision 9781)
+++ django/utils/safestring.py	(working copy)
@@ -4,7 +4,7 @@
 that the producer of the string has already turned characters that should not
 be interpreted by the HTML engine (e.g. '<') into the appropriate entities.
 """
-from django.utils.functional import curry, Promise
+from django.utils.functional import curry, wraps, Promise
 
 class EscapeData(object):
     pass
@@ -86,13 +86,24 @@
 
     encode = curry(_proxy_method, method = unicode.encode)
 
-def mark_safe(s):
+def _safety_decorator(safety_marker, func):
+  @wraps(func)
+  def wrapped(*args, **kwargs):
+    return safety_marker(func(*args, **kwargs))
+  return wrapped
+
+
+def mark_safe(s=None):
     """
     Explicitly mark a string as safe for (HTML) output purposes. The returned
     object can be used everywhere a string or unicode object is appropriate.
 
     Can be called multiple times on a single string.
     """
+    if s is None: # Used like: @mark_safe()
+        return curry(_safety_decorator, mark_safe)
+    if callable(s): # Used like: @mark_safe
+        return _safety_decorator(mark_safe, s)
     if isinstance(s, SafeData):
         return s
     if isinstance(s, str) or (isinstance(s, Promise) and s._delegate_str):
@@ -101,7 +112,7 @@
         return SafeUnicode(s)
     return SafeString(str(s))
 
-def mark_for_escaping(s):
+def mark_for_escaping(s=None):
     """
     Explicitly mark a string as requiring HTML escaping upon output. Has no
     effect on SafeData subclasses.
@@ -109,6 +120,11 @@
     Can be called multiple times on a single string (the resulting escaping is
     only applied once).
     """
+    
+    if s is None:
+        return curry(_safety_decorator, mark_for_escaping)
+    if callable(s):
+        return _safety_decorator(mark_for_escaping, s)
     if isinstance(s, (SafeData, EscapeData)):
         return s
     if isinstance(s, str) or (isinstance(s, Promise) and s._delegate_str):
