Django {{site}} template context not working? Django {{site}} template context not working? django django

Django {{site}} template context not working?


Django strives to be explicit, so it is unlikely that it would set any context by it self. There has to be context processor which sets {{site}} in settings.CONTEXT_PROCESSORS. I've checked django.core.context_processors and django.contrib.sites and there is no such processor which sets site. So you probably had a third-party context processor which does that.

It is very easy to write context processor:

myproject/context_processors.py:    from django.contrib.sites.models import Site    def site(request):        return {            'site': Site.objects.get_current()        }myproject/settings.py:    CONTEXT_PROCESSORS += ['myproject.context_processors.site']


It wont hurt to create a custom context processor

def site(request):    return {'site': Site.objects.get_current()}

Note that get_current() uses SITE_ID, which is a global setting in the project (defined in settings.py). If you are going to support multi-sites, you need the SITE_ID variable to change its value depending on the current site being accessed.

Here is a nice snippet that will make it work.