|
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) |