Настройка текущего сайта в django - nginx - PullRequest
0 голосов
/ 26 февраля 2019

Вопрос в том, каков наилучший способ изначально установить или динамически изменить 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 для запроса сайта.

Итак, безопасен ли этот способ и, что более важно, существует ли более простой способ сделать это?

...