2012-02-23 11 views
2

django-localeurlがこの目的のためにURL接頭辞を使用するのと同じように、サブドメインを使用してサイトの言語を指定できるようにします。これを行うための非ハッキーな方法はありますか?このためdjangoで各サイト言語に別々のサブドメインを設定する

+0

回答者のためのThanx。私はミドルウェアを書いており、それは優秀な作品です。 – Scorpil

答えて

2

、私はカスタムミドルウェア(Django | Middleware)を書いてお勧めします。あなたはprocess_requestメソッドをオーバーライドする場合は、あなたがのHttpRequestオブジェクトからURLを決定し、それに応じて(request.META.get('SERVER_NAME')言語を割り当てることができます)。あなたは、キー(ドメインの辞書を作成することができます)/ value(言語)の組み合わせを使用して適切なものを割り当てます。

+2

実際にrequest.META.get( 'HTTP_HOST')は、ロードバランシングを行っている場合や、ホストが何らかの形で動的な場合は、よりうまくいく可能性があります。 – Furbeenator

1

ユーザーが独自のカスタマイズ可能なサブドメインを作成できるようにしたことを除いて、私は最近同じ問題に遭遇しました。あなたの言語モデルに私はURLを解析するのは簡単な作業ではないと私は考えています。私はtldextractを使っていますが、それはうまくいきます。https://github.com/john-kurkowski/tldextract

from our_jobs.apps.poster.models import Poster 
import tldextract 


class SubdomainMiddleware: 
    """Handle if request is coming from subdomain""" 

    def process_request(self, request): 
    """Filter the given request""" 
    host = request.META.get('HTTP_HOST', '') 
    extract = tldextract.extract(host) 
    request.poster = None 
    if extract.subdomain: 
     try: 
      request.poster = Poster.objects.get(subdomain=extract.subdomain) 
     except Poster.DoesNotExist: 
      pass 

これはミドルウェアのドキュメントです。 https://docs.djangoproject.com/en/dev/topics/http/middleware/

関連する問題