22 окт. 2009 г.

TEMPLATE_CONTEXT_PROCESSORS наследование шаблонов для нескольких сайтов

Очень просто и очень глупо, оказывается, можно было решить мою давнишнюю проблему с наследованием шаблонов в многодоменном  django-проекте.

У меня есть сетка сайтов одной и той же фирмы с разным дизайном, но примерно одинаковым контентом. Для каждого сайта есть базовый шаблон base.html в котором прописаны стили, индивидуальная верстка, общие блоки и пр.

В общем решаю проблему так: есть функция, генерирующая общие для всех сайтов переменные:


def listing_and_path(request):

    ...

    rhost = request.get_host().strip('w.')

    ...

    try:

        profile = SiteProfile.objects.get(site__domain=rhost)

    except:

        profile = False

    base_tamplate = u'%s/base.html'%rhost

    return {

            'pages': Page.objects.filter(sites__domain=rhost, state='published').order_by('position'),

             ...

            'profile': profile,

            'base_tamplate':base_tamplate,

    }


Как и все приличные контекстные процессоры, данная функция подключена в settings.py:


TEMPLATE_CONTEXT_PROCESSORS = (

    "django.core.context_processors.auth",

    "django.core.context_processors.debug",

    "django.core.context_processors.i18n",

    "django.core.context_processors.media",

    "django.core.context_processors.request",

    "realtor.views.listing_and_path",

)


В шаблоне наследнике или в общем шаблоне используется конструкция вида:


{% extends base_template %}


Вещи, вроде бы, очевидные, но у меня до недавнего времени были полные копии веток шаблонов, в которых отличались только


{% extends '72arenda.ru/base.thml' %}



# или 



{% extends 'realtor-tyumen.ru/base.thml' %}


- что, как вы понимаете, клиника.

Отправить комментарий