Вопрос в том, каков наилучший способ изначально установить или динамически изменить current_site в структуре сайтов django?
Этот вопрос похож на вопрос Динамически установить идентификатор сайта , который былв 2014 году спросили
У меня есть два разных домена, один из которых содержит «verse».
Из того, что я прочитал, рекомендуется читать некоторые переменные окружения в settings.py иустановить идентификатор соответственно.
Однако socket.gethostname () не будет работать, поскольку nginx указывает оба домена на один и тот же хост.Кроме того, nginx будет нелегко установить читаемую переменную, хотя есть два файла конфигурации.Наконец, вы не можете прочитать URL в settings.py, потому что не можете получить доступ к запросу.и т. д.
Вместо этого, основываясь на связанном выше вопросе, я добавил следующее промежуточное ПО:
class SiteMiddleware(MiddlewareMixin):
def process_request(self, request):
if 'verse' in request.build_absolute_uri():
settings.SITE_ID = 2
current_site = Site.objects.get(domain__icontains='verse')
else:
settings.SITE_ID = 1
current_site = Site.objects.get(id=1)
request.current_site = current_site
return None
, которое работает, но требует отключения существующего
django.contrib.sites.middleware.CurrentSiteMiddleware
Похоже, что CurrentSiteMiddleware в первую очередь нужен установленный site_id для запроса сайта.
Итак, безопасен ли этот способ и, что более важно, существует ли более простой способ сделать это?