Настройка текущего сайта в django - nginx

Вопрос в том, каков наилучший способ изначально установить или динамически изменить current_site в структуре сайтов django?

Этот вопрос похож на вопрос " Динамически установить идентификатор сайта", который был задан в 2014 году.

У меня есть два разных домена, один из которых содержит "стих".

Из того, что я прочитал, рекомендуемый подход - прочитать некоторую переменную окружения в 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 для запроса сайта в первую очередь.

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

0 ответов

Другие вопросы по тегам