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

时间:2015-09-17 09:19:33

标签: python django apache dns

我有一个在特定域example.com上配置的Django网站。现在我打算在不得不使用他们语言的国家/地区使用相同的网站。例如中国,我打算创建一个子域chinese.example.com,它将指向完全相同的example.com项目,但语言将切换为中文。另外,我想用另一个域chinese.example.com屏蔽此chinaexample.com子域。请告诉我们如何使用Apache& amp; Django的。

1 个答案:

答案 0 :(得分:0)

第一步 - 确保将所有域添加到django config中的“ALLOWED_HOSTS”。

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

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

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_MAP设置,该设置应该是一个字典,其中包含域作为键和作为值分配给该域的语言。

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

相关问题