Несколько доменов в одном проекте Django

Рейтинг: 0Ответов: 1Опубликовано: 10.03.2023

Хочу сделать доступ к разным приложениям одного проекта 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. Как это исправить? Может быть есть другие способы реализации такого сценария?

Ответы

▲ 0Принят

В файле 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')),