Добавление контекстного процессора для приложения, использующего Sites

  • Опубликовано:
  • Теги: context-processors
Иногда один код Django может обслуживать несколько сайтов. Чтобы выбрать, на каком сайте показывать определенную страницу, обычно используется приложение Sites. Допустим, в целях указания стилей шаблона нам нужно определить текущий сайт. Для этого можно использовать контекстный процессор. Следующий код очень прост - он извлекает текущий сайт и добавляет его в контекстную переменную current_site.
from django.conf import settings
from django.contrib.sites.models import Site


def current_site(request):
'''
A context processor to add the "current site" to the current Context
'''
    try:
        current_site = Site.objects.get_current()
        return {
            'current_site': current_site,
        }
    except Site.DoesNotExist:
        # always return a dict, no matter what!
        return {'current_site':''} # an empty string
Чтобы этот код заработал, нам нужно добавить эту функцию в список settings.TEMPLATE_CONTEXT_PROCESSORS. Допустим, директория проекта называется "mysite". В ней создаем папку "context_processors" и в ней файл с именем "current_site.py". Этот файл должен содержать функцию current_site, код которой приведен выше. Вот как выглядит кусок кода из файла mysite/settings.py:
TEMPLATE_CONTEXT_PROCESSORS = (
    "mysite.context_processors.current_site.current_site",
    "django.core.context_processors.auth", 
    "django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media", 
)
Вуаля! И теперь в любом шаблоне мне доступна переменная current_site!

Оригинал