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