#python #django
Необходимо чтобы по поддомену выполнялся своё приложение. Есть site.com, нужно чтобы по main.site.con вызывалось приложение 'apps.views.main' Попробовал сделать это через middleware: class SomeDomainMiddleware(object): def process_request(self, request): if request.META['HTTP_HOST'] == 'main.site.con': return HttpResponseRedirect('/main/') else: return HttpResponseRedirect('/') Пробовал через return HttpResponseRedirect(reverse('apps.views.main')), но ругается что не передал args и kwargs, хотя кроме request там ничего и не нужно. Пробовал на уровне lighttpd разделить поддомен, но тут тоже проблема, спрашивал тут, но увы никто не помог. P.S. не хочется через SITE_ID делать это, так как по сути сайт один, просто приложение такое себе на поддомене.
Ответы
Ответ 1
По перебирал варианты, найдя точки остановок, вывел такой код: class SomeDomainMiddleware(object): def process_request(self, request): if request.META['HTTP_HOST'] == 'main.site.com': if request.META['REQUEST_URI'] == '/': return HttpResponseRedirect('/main/') else: if request.META['REDIRECT_STATUS'] != '200': return HttpResponseRedirect('/') Конструкции request.META['REDIRECT_STATUS'] != '200' и if request.META['REQUEST_URI'] != '/main/' нужны, чтобы были точки остановки, без них редирект будет бесконечным, а точнее то ограниченное чисто рас, сколько сервер разрешит, после чего будет выдано - ничего, как-то так. А эти ограничения говорят нам что редирект уже был и нужно пропустить редирект. Если кто-то имеет элегантнее способ, прошу все же поделится, так как понимаю что мой способ похож на грабли, хотя имеет место на жизнь.Ответ 2
Можно на поддомен положить свой .wsgi, который будет сразу запускать Ваше приложение. Если нужна какая-то интеграция с основным сайтом, то в .wsgi можно указать другой файл settings, например, subdomain_settings.py, в который импортировать основные settings: from settings import * А затем перекрыть требуемые элементы, например: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'ANOTHER_DB', 'USER': 'ANOTHER_USER', 'PASSWORD': 'ANOTHER_PASS', 'HOST': '127.0.0.1', 'PORT': '', } } MEDIA_ROOT = '/home/user/media' MEDIA_URL = '/media/'
Комментариев нет:
Отправить комментарий