post-thumb

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_daycurrent_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
    }