什么是基于URL中的域名在settings.py中动态设置SIDE_ID的好方法?
我有一个应用程序将运行太多的域名(基于城市),每个域的自定义settings.py文件是不可行的.
有没有办法动态设置它?
Pie*_*her 11
您可以执行自定义中间件来读取请求并设置SITE_ID.我在我的一个网站上使用此代码:
class SiteMiddleware(object):
def process_request(self, request):
try:
current_site = Site.objects.get(domain=request.get_host())
except Site.DoesNotExist:
current_site = Site.objects.get(id=settings.DEFAULT_SITE_ID)
request.current_site = current_site
settings.SITE_ID = current_site.id
Run Code Online (Sandbox Code Playgroud)
您应该查看Django关于中间件的文档,了解如何添加自己的中间件.https://docs.djangoproject.com/en/dev/topics/http/middleware/
中间件代码形式似乎发生了变化。当前(Django v3.1)形式的代码(似乎有效):
from django.conf import settings
from django.contrib.sites.models import Site
class DynamicSiteDomainMiddleware:
def __init__(self, get_response):
self.get_response = get_response
# One-time configuration and initialization.
def __call__(self, request):
try:
current_site = Site.objects.get(domain=request.get_host())
except Site.DoesNotExist:
current_site = Site.objects.get(id=settings.DEFAULT_SITE_ID)
request.current_site = current_site
settings.SITE_ID = current_site.id
response = self.get_response(request)
return response
Run Code Online (Sandbox Code Playgroud)