Python 如何使用多个域并屏蔽django项目

Python 如何使用多个域并屏蔽django项目,python,django,apache,dns,Python,Django,Apache,Dns,我有一个Django网站,它是在特定的域example.com上配置的。现在我计划在不同的国家使用同一个网站,在那里我必须使用他们的语言。例如中国,我计划创建一个子域chinese.example.com,它将指向完全相同的example.com项目,但语言将切换为中文。另外,我想用另一个域chinaexample.com来屏蔽这个china.example.com子域。请建议如何使用Apache和Django完成此操作。第一步-确保所有域都添加到Django配置中的“允许的\u主机”中 下一步

我有一个Django网站,它是在特定的域
example.com
上配置的。现在我计划在不同的国家使用同一个网站,在那里我必须使用他们的语言。例如中国,我计划创建一个子域
chinese.example.com
,它将指向完全相同的
example.com
项目,但语言将切换为中文。另外,我想用另一个域
chinaexample.com
来屏蔽这个
china.example.com
子域。请建议如何使用Apache和Django完成此操作。

第一步-确保所有域都添加到Django配置中的“允许的\u主机”中

下一步-如果您将有一些内容只适用于特定领域,那么使用django中内置的sites框架将非常方便。但如果您希望在多个域上使用一种语言,并且希望某些内容可用于语言而不是域,则更好的解决方案可能是创建自己的方法来将内容分配给域(或语言)

第三步-编写中间件,检查您的域并激活分配给它的语言。示例中间件可以如下所示:

class DomainLanguageMiddleware:

    def process_request(self, request):

        try:
            host = request.META['HTTP_HOST']
            host_port = host.split(':')
            if len(host_port) == 2:
                host = host_port[0]

            if host in settings.LANG_MAP:
                request.LANG = settings.LANG_MAP[host]
                translation.activate(request.LANG)
                request.LANGUAGE_CODE = request.LANG
        except KeyError:
            pass
此代码正在使用
LANG\u MAP
设置,该设置应该是一个字典,其中包含域作为键,以及指定给该域的语言作为值


使用该解决方案,所有域或子域都可以使用一个settings.py文件指向一个django实例。

第一步-确保所有域都添加到django配置中的“允许的\u主机”中

下一步-如果您将有一些内容只适用于特定领域,那么使用django中内置的sites框架将非常方便。但如果您希望在多个域上使用一种语言,并且希望某些内容可用于语言而不是域,则更好的解决方案可能是创建自己的方法来将内容分配给域(或语言)

第三步-编写中间件,检查您的域并激活分配给它的语言。示例中间件可以如下所示:

class DomainLanguageMiddleware:

    def process_request(self, request):

        try:
            host = request.META['HTTP_HOST']
            host_port = host.split(':')
            if len(host_port) == 2:
                host = host_port[0]

            if host in settings.LANG_MAP:
                request.LANG = settings.LANG_MAP[host]
                translation.activate(request.LANG)
                request.LANGUAGE_CODE = request.LANG
        except KeyError:
            pass
此代码正在使用
LANG\u MAP
设置,该设置应该是一个字典,其中包含域作为键,以及指定给该域的语言作为值


使用该解决方案,所有域或子域都可以指向一个django实例,使用一个settings.py文件。

将您的域添加到“django.contrib.sites”模型您是否了解域屏蔽和apache/wsgi配置?将您的域添加到“django.contrib.sites”模型您是否了解域屏蔽和apache/wsgi配置?