2017-03-28 11 views
1

ユーザーが私のdjangoアプリケーションをどのドメインに入力するかによって、2つの異なるフロントエンドテンプレートを提供するWebアプリケーションを設計したいと思います。djangoで現在のドメイン名を検出するにはどうすればよいですか?

ユーザーがaaa.comを入力すると、アプリAAA_USAからフロントエンドに配信されますが、ユーザーがaaa.co.myから入力すると、アプリAAA_MYからフロントエンドに配信されます。

これを行うにはどのような方法が最適ですか?私は "現在のドメイン名を検出する"と思っていただけで、単にView関数にif-else文を追加しました。

これら2つのドメインは、私のDjangoアプリケーションを含む同じネームサーバーを指しています。

+0

{{request.get_host}} – RaminNietzsche

+1

ご利用いただきありがとうございますが、リクエストオブジェクトなしでやってもらえますか?私はまた、(要求引数を含む)ビュー関数の外でそれを使用する必要があるかもしれないので、 –

+2

これをチェックしてください:Site.objects.get_current()。domain https://docs.djangoproject.com/en/1.8/ref/contrib/サイト/ – RaminNietzsche

答えて

0

方法は基本的に(ミドルウェアを使用してセッションを使用して検出されますHTTP_HOST。

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

def __call__(self, request): 
    # Code to be executed for each request before the view (and later middleware) are called. 

    # sets to show Taiwan or Indo version 
    # sets the timezone too 
    http_host = request.META['HTTP_HOST'] 
    if(http_host == 'http://www.xxx.tw'): 
     request.session['web_to_show'] = settings.TAIWAN 
     request.session['timezone_to_use'] = settings.TAIWAN_TIMEZONE 
    else: 
     request.session['web_to_show'] = settings.INDO 
     request.session['timezone_to_use'] = settings.INDONESIA_TIMEZONE 

    response = self.get_response(request) 

    # Code to be executed for each request/response after the view is called. 

    return response 
0

使用

request.build_absolute_uri() 

はフルパスをretriveます: ES:私はそれをしなかった

http://localhost:8000/test/

+1

とにかくリクエストオブジェクトなしでそれを行うには?私はまた、(要求引数を含む)ビュー関数の外でそれを使用する必要がありますので、 –

+0

要求オブジェクトなしでは不可能です。 2ウェイ 1)他のファンクションのリクエストオブジェクトを引数として渡します。 2)最初のビューでは、パスの値をクッキーに保存し、他のファンクションのクッキーを読み込みます – Mattia

関連する問題