如何根据域本地化多站点Django应用?

时间:2018-10-03 21:33:31

标签: django

我有一个Django项目,一个网站,但是每种翻译都由一个域表示,英文为drenglish.com,西班牙语为drspanish.com,葡萄牙语为drportuguese.com。

只有一个管理员,一个数据库

我看到大多数使用Django(2.0和python 3.7)的主机,您需要通过ssh linux(putty)来托管。

但是我如何才能使3个域同时工作?

抱歉,菜鸟问题是我第一次建立网站

如果有任何帮助我用来检测域并提供正确语言的中间件

class SetLanguageToDomain:
    def __init__(self, get_response):
        self.get_response = get_response
        # One-time configuration and initialization.

    def __call__(self, request):
        current_site = get_current_site(request).domain
        if current_site == 'www.drportuguese.com':
            user_language = 'pt_BR'
        elif current_site == 'www.drspanish.com':
            user_language = 'es_ES'
        else:
            user_language = 'en'
        translation.activate(user_language)
        request.session[translation.LANGUAGE_SESSION_KEY] = user_language

        response = self.get_response(request)

        return response

2 个答案:

答案 0 :(得分:2)

Django使用此中间件Function process() Dim tmp As String tmp = Dir("C:\Users\Calhoun\Documents\REPORTING\Correspondence\*.txt") Do While tmp > "" If Len(Dir("C:\Users\Calhoun\Documents\REPORTING\Correspondence\STATIC_FILE_NAME.txt")) <> 0 Then Kill "C:\Users\Calhoun\Documents\REPORTING\Correspondence\STATIC_FILE_NAME.txt" End If Name "C:\Users\Calhoun\Documents\REPORTING\Correspondence\" & tmp As "C:\Users\Calhoun\Documents\REPORTING\Correspondence\STATIC_FILE_NAME.txt" DoCmd.RunMacro "RunQueries" tmp = Dir Loop End Function 来了解使用哪种语言来呈现您的响应。如果您检查代码,则将在模块django.middleware.locale.LocaleMiddleware中调用一个函数:translation

这是函数的源代码

get_language_from_path

要找到匹配项,django使用项目的language_code_prefix_re = re.compile(r'^/(\w+([@-]\w+)?)(/|$)') def get_language_from_path(path, strict=False): """ Return the language code if there's a valid language code found in `path`. If `strict` is False (the default), look for a country-specific variant when neither the language code nor its generic variant is found. """ regex_match = language_code_prefix_re.match(path) if not regex_match: return None lang_code = regex_match.group(1) try: return get_supported_language_variant(lang_code, strict=strict) except LookupError: return None 设置来查找类似LANGUAGES的内容,您可以检查LocalMiddleWare的代码和it-IT来将中间件更改为您的需求。

答案 1 :(得分:1)

您需要使三个不同的域指向DNS中的同一服务器(enter image description hereAWS的文档)。确保所有3个文件都在Heroku的ALLOWED_HOSTS中,然后在您的视图中可以通过settings上的元访问主机:

request.META['HTTP_HOST']

与您的项目可能相关的还有request.META['HTTP_ACCEPT_LANGUAGE']