app/django/core/context_processors.py
changeset 54 03e267d67478
child 323 ff1a9aa48cfd
equal deleted inserted replaced
53:57b4279d8c4e 54:03e267d67478
       
     1 """
       
     2 A set of request processors that return dictionaries to be merged into a
       
     3 template context. Each function takes the request object as its only parameter
       
     4 and returns a dictionary to add to the context.
       
     5 
       
     6 These are referenced from the setting TEMPLATE_CONTEXT_PROCESSORS and used by
       
     7 RequestContext.
       
     8 """
       
     9 
       
    10 from django.conf import settings
       
    11 
       
    12 def auth(request):
       
    13     """
       
    14     Returns context variables required by apps that use Django's authentication
       
    15     system.
       
    16 
       
    17     If there is no 'user' attribute in the request, uses AnonymousUser (from
       
    18     django.contrib.auth).
       
    19     """
       
    20     if hasattr(request, 'user'):
       
    21         user = request.user
       
    22     else:
       
    23         from django.contrib.auth.models import AnonymousUser
       
    24         user = AnonymousUser()
       
    25     return {
       
    26         'user': user,
       
    27         'messages': user.get_and_delete_messages(),
       
    28         'perms': PermWrapper(user),
       
    29     }
       
    30 
       
    31 def debug(request):
       
    32     "Returns context variables helpful for debugging."
       
    33     context_extras = {}
       
    34     if settings.DEBUG and request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS:
       
    35         context_extras['debug'] = True
       
    36         from django.db import connection
       
    37         context_extras['sql_queries'] = connection.queries
       
    38     return context_extras
       
    39 
       
    40 def i18n(request):
       
    41     context_extras = {}
       
    42     context_extras['LANGUAGES'] = settings.LANGUAGES
       
    43     if hasattr(request, 'LANGUAGE_CODE'):
       
    44         context_extras['LANGUAGE_CODE'] = request.LANGUAGE_CODE
       
    45     else:
       
    46         context_extras['LANGUAGE_CODE'] = settings.LANGUAGE_CODE
       
    47 
       
    48     from django.utils import translation
       
    49     context_extras['LANGUAGE_BIDI'] = translation.get_language_bidi()
       
    50 
       
    51     return context_extras
       
    52 
       
    53 def media(request):
       
    54     """
       
    55     Adds media-related context variables to the context.
       
    56 
       
    57     """
       
    58     return {'MEDIA_URL': settings.MEDIA_URL}
       
    59 
       
    60 def request(request):
       
    61     return {'request': request}
       
    62 
       
    63 # PermWrapper and PermLookupDict proxy the permissions system into objects that
       
    64 # the template system can understand.
       
    65 
       
    66 class PermLookupDict(object):
       
    67     def __init__(self, user, module_name):
       
    68         self.user, self.module_name = user, module_name
       
    69 
       
    70     def __repr__(self):
       
    71         return str(self.user.get_all_permissions())
       
    72 
       
    73     def __getitem__(self, perm_name):
       
    74         return self.user.has_perm("%s.%s" % (self.module_name, perm_name))
       
    75 
       
    76     def __nonzero__(self):
       
    77         return self.user.has_module_perms(self.module_name)
       
    78 
       
    79 class PermWrapper(object):
       
    80     def __init__(self, user):
       
    81         self.user = user
       
    82 
       
    83     def __getitem__(self, module_name):
       
    84         return PermLookupDict(self.user, module_name)