Python Django:如何从中间件将字符串变量导入Django设置文件
我的设置文件中有一个变量SITE_HOST_NAME,我希望根据当前租户域(比如t1.leap.com)动态更改和更新该变量。我已经编写了一个自定义中间件来获取当前租户域,问题是将它生成的当前租户域附加到当前为空字符串的设置文件变量。注意:我正在使用Django租户实现多租户 设置.pyPython Django:如何从中间件将字符串变量导入Django设置文件,python,django,Python,Django,我的设置文件中有一个变量SITE_HOST_NAME,我希望根据当前租户域(比如t1.leap.com)动态更改和更新该变量。我已经编写了一个自定义中间件来获取当前租户域,问题是将它生成的当前租户域附加到当前为空字符串的设置文件变量。注意:我正在使用Django租户实现多租户 设置.py SITE_HOST_SCHEMA = os.getenv('SITE_HOST_SCHEMA', 'http') SITE_HOST_NAME = '' SITE_HOST_PORT = os.getenv('
SITE_HOST_SCHEMA = os.getenv('SITE_HOST_SCHEMA', 'http')
SITE_HOST_NAME = ''
SITE_HOST_PORT = os.getenv('SITE_HOST_PORT', 8000)
_default_siteurl = "%s://%s:%s/" % (SITE_HOST_SCHEMA,
SITE_HOST_NAME,
SITE_HOST_PORT) if SITE_HOST_PORT else "%s://%s/" % (
SITE_HOST_SCHEMA, SITE_HOST_NAME)
SITEURL = os.getenv('SITEURL', _default_siteurl)
my_.py
from django.conf import settings
from django.db import connection
from django.utils.deprecation import MiddlewareMixin as MIDDLEWARE_MIXIN
from django_tenants.utils import remove_www, get_tenant_model, get_public_schema_name
from customers.models import Domain
class CustomTenantMiddleware(MIDDLEWARE_MIXIN):
def get_tenant(self, model, hostname, request):
return model.objects.get(domain_url=hostname)
def hostname_from_request(self, request):
""" Extracts hostname from request. Used for custom requests filtering.
By default removes the request's port and common prefixes.
"""
return remove_www(request.get_host().split(':')[0]).lower()
def process_request(self, request):
try:
hostname = self.hostname_from_request(request)
s = Domain.objects.get(domain=hostname)
if s:
settings.SITE_HOST_NAME = s.domain
print(settings.SITE_HOST_NAME)
except KeyError:
pass # use default urlconf (settings.ROOT_URLCONF)
设置值在运行时不应更改。@ArakkalAbu我希望该值在运行设置文件之前获取当前域名并进行设置。只需使用.env文件存储变量,然后在设置文件中加载此文件并从中获取变量即可file@BakhtiyarBekbergen如何确保从.env获取的内容是动态的与当前租户域名类似