Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:如何从中间件将字符串变量导入Django设置文件_Python_Django - Fatal编程技术网

Python Django:如何从中间件将字符串变量导入Django设置文件

Python 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_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_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获取的内容是动态的与当前租户域名类似