【发布时间】:2020-07-16 00:20:50
【问题描述】:
我们使用 Django CMS 有一段时间了,需要将我们的网站迁移到使用 Django Sites 框架的多站点实现。我们想使用CurrentSiteMiddleware 来检测使用了哪个站点(基于子域)。结果,我们将根据当前用户对我们网站的请求,通过中间件设置request.site.id。
我试图找到如何在不分叉的情况下使用 Django CMS 的最佳方法,但没有找到如何做到这一点的好方法。
我们真正需要什么:
- 每个页面都可以在当前站点上使用,或者同时在几个站点上使用。为此,Django 文档建议将 M2M FK 从每个 Article 对象添加到 Site 模型(在我们的例子中,它是 Page 对象)。但是
TreeNode具有Site模型的FK,这意味着只能将一个页面映射到单个站点。但是我们需要同时将一个页面映射到一个或几个站点。 - 我们想使用Django Sites framework,因为 Django 内置了它,并且 Django 的创建者在他们的项目中使用它(它的设计目的是为了同时将一些对象映射到一个或几个站点) .在我看来,在同一个网络应用实例上运行多站点解决方案是一种非常清晰的方法。
- 我们需要一个应用程序实例,因为我们需要在多个组织之间使用共享插件(每个组织在子域上都有自己的站点)。
- 我们计划让数百个组织使用我们的共享代码库,但它无法为每个新子域运行一个新实例。维护、升级等也更难。但看起来当前实现中的 Django CMS 只能在
settings.py文件中设置SITE_ID的每个实例中工作。 - 当我们从 settings.py 中删除 SITE_ID 定义时,Django 无法启动 Web 服务器,因为 Django CMS 使用
get_current_site()和get_site_id()-- 尝试从设置中加载SITE_ID值文件。我正在尝试模拟此类用法,但想为此找到更好的方法。
请帮助我们找到如何继续使用 Django CMS 的方法,而无需编写我们自己的类似 CMS 的自行车解决方案。我们普遍喜欢 Django CMS,并希望在我们已有 5 年历史的社交项目中继续使用它。
需要你的帮助。
【问题讨论】:
标签: python django django-cms