DEV Community 👩‍💻👨‍💻

Cover image for Custom Context Processors in Django.

Posted on • Updated on

Custom Context Processors in Django.

What's the need of context processors? 😇

Sometimes you want to make a variable accessible to all templates in a project.

Two ways to access a variable in all templates:

1. Hard Way: By providing the same variable in the context of each view. 😐

2. Easy Way: creating a custom context processor 😋

Personally I don't like the hard way, cause then I have to write the same code in each view.

Let's see how it can be done the easy way.

Consider a situation where you need to display a banner image in each page of your website, the banner image will be fetched from the database.

Model for the banner image:
class BannerImage(models.Model):
    image = models.ImageField(upload_to='img')
Enter fullscreen mode Exit fullscreen mode

We can access the banner image in each page using the context processor.

Write Custom Context Processor 🙌

Create a new file inside your app and write a function which will return a dictionary containing the variable we want to use.

from .models import BannerImage

def access_banner_image(request):
      The context processor must return a dictionary.
    bannerImage = BannerImage.objects.latest('-id') #query the latest banner image
    return {'bannerImage':bannerImage} 

Enter fullscreen mode Exit fullscreen mode

access_banner_image is the custom context processors we just created, add it to the context_processors option in the TEMPLATES setting so that the variable bannerImage is accessible in all templates.
        #under OPTIONS key
        'OPTIONS': {
            'context_processors': [
               #context processor written by us.
Enter fullscreen mode Exit fullscreen mode

We are done 🎉 , the bannerImage variable will be now accessible in all the templates.


<img src="{{bannerImage.image.url}}" alt=''/>
Enter fullscreen mode Exit fullscreen mode

Thanks For Reading my post.🙂

Self-Promotion 😀

IllustrationHunt One place to look for sites offering free illustrations.

Top comments (4)

hiddenbycloak profile image
Náhóczki Tamás D.

Exactly what I needed! Thanks!

alimp5 profile image

Tnx a lot :X

codephilanthropist profile image
Rian • Edited on

Thanks for this. I've read a lot of articles on how to extend my search form to all templates including the base.html. This one works best.

gilbishkosma profile image

Thanks Rian, it really made my day 😄

Regex for lazy developers

regex for lazy devs

You know who you are. Sorry for the callout 😆