Несколько доменов в одном проекте Django
Хочу сделать доступ к разным приложениям одного проекта Django с разных поддоменов. Сейчас это реализовно через разные ссылки.
path('test1/', include('test1.urls')),
path('test2/', include('test2.urls')),
В nginx для каждого домена прописан proxy_pass на свою ссылку.
location / {
include proxy_params;
proxy_pass http://unix:/home/myproject.sock/myproject.sock:/test1/;
}
Всё работает, но, если использовать в темплейтах тег url, чтобы получить ссылку, то в ссылку добавляется test1. Как это исправить? Может быть есть другие способы реализации такого сценария?
Ответы (1 шт):
Автор решения: Aleksandr Fetisov
→ Ссылка
В файле settings.py добавь список разрешенных доменов
ALLOWED_HOSTS = ['example.com', 'test1.example.com', 'test2.example.com']
Создай middleware.py в корневой папке проекта и добавьте в него следующий код
from django.conf import settings
from django.urls import get_host
class SubdomainMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
host = get_host(request)
subdomain = host.split('.')[0]
if subdomain in settings.ALLOWED_HOSTS:
request.subdomain = subdomain
else:
request.subdomain = None
response = self.get_response(request)
return response
Добавь middleware в файле settings.py
MIDDLEWARE = [
...
'path.to.middleware.SubdomainMiddleware',
...
]
Используйте имя приложения вместо префикса в файле urls.py
path('', include('test1.urls')),
path('', include('test2.urls')),