Очень просто и очень глупо, оказывается, можно было решить мою давнишнюю проблему с наследованием шаблонов в многодоменном 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' %}
- что, как вы понимаете, клиника.
5 комментариев:
Спасибо за интересный метод.
Я для решения такой задачи написал свой template loader, который брал шаблоны из необходимой директории.
А где можно посмотреть этот template loader?
Моего сейчас нет под рукой, могу только вечером его выложить.
Но я делал на основе template loader'а из Byteflow: http://byteflow.su/browser/apps/lib/template_loaders.py
Текущий сайт определяется через SiteIDHook(), который я тоже увидел в Byteflow (http://byteflow.su/browser/apps/lib/threadlocals.py)
Да здравствует еще более легкий способ построения дорвеев! ;)
Кстати, про дорвеи, как это работает? В чем принцип? Я честно не могу пока вкурить, как можно поднять посещаемость за счет не человеко приятной херни.
Отправить комментарий