[英]Django CMS: How to avoid SITE_ID to be set in settings?
我们正在使用Django CMS一段时间,并且需要将我们的网站迁移到使用 Django Sites 框架的多站点实施。 我们想使用CurrentSiteMiddleware来检测使用了哪个站点(基于子域)。 结果,我们将有一个由中间件设置的request.site.id
,它基于当前用户对我们网站的请求。
我试图找到如何在不分叉的情况下使用 Django CMS 的最佳方法,但没有找到如何做到这一点的好方法。
我们实际需要什么:
TreeNode
具有到Site
model 的 FK,这意味着只能将一个 Page 映射到单个站点。 但是我们需要将 map 一个页面同时发送到一个或几个站点。settings.py
文件中设置SITE_ID
的每个实例中工作。SITE_ID
CMS 使用设置文件中的get_current_site()
get_site_id()
() 和 get_current_site() 我试图模拟这种用法,但想为此找到更好的方法。请帮助我们找到如何继续使用 Django CMS 的方法,而无需编写我们自己的类似 CMS 的自行车解决方案。 我们通常喜欢 Django CMS,并希望在我们已有 5 年历史的社交项目中继续使用它。
需要你的帮助。
经过几天的调查,我得出结论,Django CMS 的设计方式是必须在settings.py
文件中设置SITE_ID
属性。 在许多地方,它无法访问请求 object,从中我们可以潜在地识别出哪个站点用于发出请求。
我发现的唯一方法是在每个传入请求时动态更改我自己的中间件中的设置。 这是非常奇怪的做法,但是因为 Django CMS 在我们的网站中被积极使用,我们不能直接替换它——我们需要使用这种 hack 方式,至少现在是这样。 而 Django 应用程序需要在单线程中运行才能实现这种方法。
Idea 是从django-multisite
项目中借来的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.