@softshape

Как переопределять template.dirs в Django?

Ситуация такая - один сервер обслуживает несколько доменов. У каждого из них свой base.html и каталоги выглядят так -

templates/domain1/base.html
templates/domain2/base.html
templates/domain3/base.html

Мы сделали middleware, которая смотрит на домен и переопределяет templates.dirs, добавляет к нему нужный каталог. Причем видим в отладке, что templates.dirs принимает правильное значение. Однако лоадер шаблонов на него плюет! Он как при старте Django загрузил значение templates.dirs, так дальше с ним и работает. В итоге все домены используют base.html какого-то одного домена (тот, что был загружен первым).

Как его от этого отучить?.... django.template.loaders.cached.Loader отключен, если что.
  • Вопрос задан
  • 302 просмотра
Пригласить эксперта
Ответы на вопрос 3
un1t
@un1t
Подозреваю, что вам нужно переопределить Loader и прописать его в настроках шаблонов
from django.template.loaders.app_directories import Loader
Ответ написан
shultais
@shultais
Обучаю программированию на Python и SQL
Переопределять настройки плохая практика:)

Можно пойти немного другим путем:
1. Менять путь до шаблона во views
template = get_template("%s/base.html" % request.domain)

2. Динамически генерировать имена шаблонов во views и context_processros, а потом передавать их как переменные в шаблоны для использования в include и extends.
"domain_base_template": "%s/base.html" % request.domain

{% extends domain_base_template %}
Ответ написан
@softshape Автор вопроса
В общем думали-думали и вернулись к решению, от которого хотели изначально уйти. Это стандартное джанговское "запуск нескольких копий, каждая со своими settings.py". Задачу нашу она решает как из пушки по воробьям, но ведь решает.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы