Не уверен, как сделать простое правило перезаписи в nginx.Помимо тега шаблона (если вы заменяете только статический контент, то я думаю, что тег шаблона - это то, что нужно), если сайты будут вообще отличаться от шаблона, вы можете справиться с этим, написав пользовательскийзагрузчик шаблонов.
Это позволяет вам выбрать, какие шаблоны вы хотели бы использовать при отображении вашей страницы.Этот метод имеет изящный способ сбой, если загрузчик не может найти соответствующий шаблон для вашего конкретного домена.Если он не найдет совпадения, он вернется к вашему основному каталогу шаблонов.Таким образом, вы можете иметь пользовательские вещи для некоторых доменов и более общие для других.
Но чтобы принять решение о том, что обслуживать, основываясь на заголовке запроса, вам нужно сделать запрос доступным для загрузчика через _thread_localsЯ делаю это в некотором промежуточном программном обеспечении:
#custom.middleware.py
try:
from threading import local
except ImportError:
from django.utils._threading_local import local
_thread_locals = local()
def get_current_request():
return getattr(_thread_locals, 'request', None)
class RequestMiddleware():
def process_request(self, request):
_thread_locals.request = request
Затем напишите загрузчик шаблонов (обновите путь к промежуточному программному обеспечению):
#custom.loaders.py
from os.path import join
from django.conf import settings
from django.template import TemplateDoesNotExist
from path.to.middleware import get_current_request
def load_template_source(template_name, template_dirs=None):
request = get_current_request()
host = request.get_host()
path_to_template_dir = None
for site in settings.SITE_TEMPLATE_FOLDERS:
if site[0] == host:
path_to_template_dir = site[1]
break
if path_to_template_dir:
try:
filepath = join(path_to_template_dir, template_name)
file = open(filepath)
try:
return (file.read(), filepath)
finally:
file.close()
except IOError:
pass
raise TemplateDoesNotExist(template_name)
и, наконец, обновите файл настроек с помощью трех вещей 1) добавить загрузчик шаблонов (сначала убедитесь, что он указан в списке) 2) добавить промежуточное программное обеспечение 3), а затем добавить новую переменную SITE_TEMPLATE_FOLDERS с кортежем кортежей, содержащих домены и пути к папкам шаблонов:
#settings.py
.....
TEMPLATE_LOADERS = (
'custom.loaders.load_template_source',
'django.template.loaders.filesystem.load_template_source',
'django.template.loaders.app_directories.load_template_source',
)
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'domain.middleware.SessionMiddleware',
'custom.middleware.RequestMiddleware',
)
SITE_TEMPLATE_FOLDERS = (
('mydomain.com', '/path/to/templates'),
('myotherdomain.com', '/path/to/other/templates')
)
...
Похожемного, но теперь вы можете легко добавить новый домен через ваш файл настроек.