在django中为每种站点语言设置单独的子域

时间:2012-02-23 20:55:42

标签: python django subdomain

我希望能够使用子域来指定网站的语言,就像django-localeurl为此目的使用url前缀一样。是否有任何非黑客的方法来做到这一点?

2 个答案:

答案 0 :(得分:2)

为此,我建议编写自定义中间件(Django | Middleware)。如果覆盖process_request方法,可以从HttpRequest对象中确定url并相应地分配语言(request.META.get('SERVER_NAME')你可以创建一个关键(域)/值(语言)对的字典来分配合适的字典。

答案 1 :(得分:1)

我最近遇到了同样的问题,但我允许用户创建自己的可自定义子域。我通过创建自定义中间件解决了这个问题。 Poster模型将与您的语言模型相对应。我不认为解析网址是一项微不足道的任务,我使用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/

相关问题