问题是在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。
那么,这种方法安全吗?更重要的是,有一种更简单的方法吗?