Custom Context Processor In Django

Let's say you have a file structure like this for your Django project:

├───project
│   ├───__init__.py
│   ├───asgi.py
│   ├───settings.py
│   ├───urls.py
│   └───wsgi.py
├───.env
├───manage.py
└───db.sqlite3

1) Create a context_processors.py file in the project folder (along with settings.py):

It can be put anywhere in Django project but I think here is a good place to put.

├───project
│   ├───__init__.py
│   ├───asgi.py
│   ├───context_processors.py
│   ├───settings.py
│   ├───urls.py
│   └───wsgi.py
├───.env
├───manage.py
└───db.sqlite3

2) Create a function in context_processors.py that accepts a HttpRequest object as an argument and returns a dictionary. A context processor is just a function that accepts an HttpRequest object as an argument and returns a dictionary.

@project/context_processors.py

from blog.models import Cat, Post

def context_for_every_template(request):
    cats = Cat.objects.all()
    featured_posts = Post.objects.filter(featured=True)
    latest_posts = Post.objects.all()[:4]
    context = {
        'cats': cats,
        'featured_posts': featured_posts,
        'latest_posts': latest_posts,
    }
    return context

3) Add this to your context_processors setting in settings.py (at the bottom for security reasons):

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'config' / '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',
                'project.context_processors.context_for_every_template', # Add it here
            ],
        },
    },
]

Now you'll be able to access the 'cats', 'featured_posts' and 'latest_posts' template variables on every single django template across your whole site.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值