Introduction to context processor in dajngo
A context processor is a function that takes a request object as their argument and returns a dictionary to be merged into the context, and it is accessible in all the templates.
Django provides many default context processors that you can see in settings.py file in the default template engine.
Custome context processor
You can create your own custom context processors. For that you need to create a file named context_processors.py.
context_processor.py
import datetime
def date_context_processor(request):
current_datetime = datetime.datetime.now()
return {
'current_day': current_datetime.day,
'current_month': current_datetime.month,
'current_year': current_datetime.year
}
In this example we will return current day, month and year, but you can return what ever you want for example you can return query set or current git branch, etc.
Now you need to specify your context_processors in settings file.
settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'myapp.context_processors.date_context_processor' # <-- custom context processor
],
},
},
]
To render this context in your template using current_day, current_month and current_year keys.
base.html
{{ current_day }}
{{ current_month }}
{{ current_year }}
Show git active barnch
import datetime
import git
from django.conf import settings
def date_context_processor(request):
current_datetime = datetime.datetime.now()
repo = git.Repo(settings.BASE_DIR)
return {
'current_year': current_datetime.year,
'active_branch': repo.active_branch.name
}