Я бы хотел, чтобы несколько проектов django жили с одним и тем же корневым URL:
example.com/ # controlled by home django project
example.com/project-2 # controlled by a separate django project
example.com/project-3 # controlled by yet another django project
Я уже переопределяю LOGIN_REDIRECT_URL и т. Д. Как , предложенный этим превосходным ответом , но я обнаружил еще одно препятствие. Я на самом деле использую те же приложения в проектах, которые находятся по адресу example.com/project-2 и example.com/project-3, что вызывает некоторые нетривиальные проблемы с ссылками на контент внутри проекта django, которые до сих пор были решено на первый взгляд хакерскими решениями.
Например, вы никогда не можете ссылаться на '/' в любом шаблоне в example.com/project-2 или example.com/project-3, чтобы вернуться в корень проекта django, размещенного на любом из этих URL-адресов. - это будет ссылка на домашний проект django на example.com. Чтобы обойти это, я создал контекстный процессор, который правильно добавляет корневой URL-адрес проекта на основе пользовательской переменной settings.py SCRIPT_NAME: '' (например, com.com), '/ project-2' (например, example.com). / project-2) или '/ project-3' (например ,.com/project-3). Это все хорошо, за исключением того, что вам нужно сделать то же самое в функциях get_absolute_url. Прежде чем я знал это, я только что превратил кучу кода, который можно было многократно использовать (не для меня), в код, который вообще нельзя было использовать повторно.
Есть ли способ добиться того же эффекта, не добавляя абсолютные URL-адреса с помощью SCRIPT_NAME? Возможно, что-то умное с конфигурацией apache или mod_wsgi? Я в недоумении и надеюсь, что кто-то может помочь ...
РЕДАКТИРОВАТЬ:
Моя конфигурация apache для example.com выглядит следующим образом:
# redirect un-'/'-terminated urls to the '/'-terminated root urls
RewriteEngine On
RewriteRule /project-2$ /project-2/ [R=302,L]
RewriteRule /project-3$ /project-3/ [R=302,L]
# mod wsgi setup
WSGIScriptAlias /project-2 /srv/project2/project-2.wsgi
WSGIScriptAlias /project-3 /srv/project3/project-3.wsgi
WSGIScriptAlias / /srv/project1/project-1.wsgi