在Django中设置当前站点-Nginx

时间:2019-02-25 21:01:30

标签: django nginx django-sites

问题是在Django站点框架中初始设置或动态更改current_site的最佳方法是什么?

此问题类似于2014年提出的问题Dynamically Set Site ID

我有两个不同的域,其中一个域包含“ verse”。

据我所读,推荐的方法是在settings.py中读取一些环境变量并相应地设置ID。

但是,因为nginx将两个域都指向同一主机,所以socket.gethostname()将不起作用。此外,尽管有两个配置文件,但nginx不会轻易设置可读变量。最后,您无法读取settings.py中的URL,因为您无法访问请求。等

相反,我在上面链接的问题的基础上,添加了此中间件:

  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似乎首先需要为站点查询设置set site_id。

那么,这种方法安全吗?更重要的是,有一种更简单的方法吗?

0 个答案:

没有答案