Gilbish
Posted on August 30, 2020
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:
#models.py
class BannerImage(models.Model):
image = models.ImageField(upload_to='img')
We can access the banner image in each page using the context processor.
Write Custom Context Processor 🙌
Create a new file context_processors.py inside your app and write a function which will return a dictionary containing the variable we want to use.
#context_processors.py
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}
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.
#settings.py
TEMPLATES = [
{
#under OPTIONS key
'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',
#context processor written by us.
'appname.context_processors.access_banner_image'
],
},
},
]
We are done 🎉 , the bannerImage variable will be now accessible in all the templates.
Example:
<img src="{{bannerImage.image.url}}" alt=''/>
Thanks For Reading my post.🙂
Self-Promotion 😀
IllustrationHunt One place to look for sites offering free illustrations.
Posted on August 30, 2020
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.