python / intermediate
Snippet
Django Custom Context Processors
Context processors inject variables into every template context automatically, eliminating repetitive template injection. They receive the HttpRequest object and return a dictionary merged into all template contexts. Common use cases include adding navigation state, injecting analytics data, or making settings available site-wide. They execute on every render, so keep them lightweight.
snippet.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# project/context_processors.pyfrom datetime import datetimedef template_variables(request):return {'current_year': datetime.now().year,'debug_mode': settings.DEBUG,'request_path': request.path,}# settings.pyTEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','project.context_processors.template_variables',],},},]
django
Breakdown
1
def template_variables(request):
Function receives request object, returns dict merged into template context
2
'project.context_processors.template_variables'
Dotted path string in settings activates this processor globally
3
'django.template.context_processors.request'
Built-in processor makes request available in templates
4
'debug_mode': settings.DEBUG
Templates can conditionally show/hide debug information based on this