Мы некоторое время используем Django CMS , и нам необходимо перенести наш сайт на многосайтовую реализацию с Django Sites Framework. Мы хотим использовать CurrentSiteMiddleware , чтобы определить, какой сайт используется (в зависимости от субдомена). В результате у нас будет установлен request.site.id
промежуточным программным обеспечением, основанным на текущем запросе пользователя на наш сайт.
Я попытался найти лучший способ использования Django CMS, не разветвляя его, и не нашел хорошего способа сделать это.
Что нам на самом деле нужно:
- каждая Страница может использоваться на текущем Сайте, или на нескольких сайтах одновременно. Для этого в документации Django рекомендуется добавить M2M FK к модели Site из каждого объекта Article (в нашем случае это объект Page). Но
TreeNode
имеет FK для модели Site
, что означает, что только одна страница может быть сопоставлена с одним сайтом. Но нам нужно сопоставить одну страницу с одним или несколькими сайтами одновременно. - мы хотим использовать Django Sites Framework , потому что Django имеет встроенные функции и создатели из Django используйте его в своих проектах (и это для того, что было разработано - для сопоставления некоторого объекта с одним или несколькими сайтами одновременно). На мой взгляд, это очень четкий подход - иметь многосайтовое решение, работающее на одном и том же экземпляре веб-приложения.
- нам нужен один экземпляр приложения, потому что у нас есть общие плагины, которые нам нужны использовать в нескольких организациях (каждая организация имеет свой собственный сайт на поддомене).
- мы планируем использовать сотни организаций, использующих нашу общую кодовую базу, и она не сможет запустить новый экземпляр для каждого нового субдомена. Также сложнее в обслуживании, обновлении и т. Д. c. Но похоже, что Django CMS в текущей реализации может работать только на один экземпляр с набором
SITE_ID
в файле settings.py
. - , когда мы удаляем определение SITE_ID из settings.py , Django не может запустить веб-сервер, потому что Django CMS использует
get_current_site()
и get_site_id()
- пытается загрузить значение SITE_ID
из файла настроек. Я пытаюсь насмехаться над таким использованием, но хочу найти лучший подход для этого.
Пожалуйста, помогите нам найти способ, как продолжить использование Django CMS, без написания нашего собственного CMS-подобное велосипедное решение. Как правило, нам нравится Django CMS и мы хотим продолжать использовать его в нашем 5-летнем социальном проекте.
Нужна ваша помощь.