如何使用每个 SITE_ID 的唯一 settings.py 设置 django
Posted
技术标签:
【中文标题】如何使用每个 SITE_ID 的唯一 settings.py 设置 django【英文标题】:How to setup django with unique settings.py per SITE_ID 【发布时间】:2012-10-05 09:57:15 【问题描述】:我一直在研究在单个 Django 框架下拥有多个站点的各种(并且有很多)方法。
我仍然没有找到适合我用例的解决方案。用例是:
单个数据库,因为大部分数据 (95%+) 将在两个数据库之间共享 应用程序 两种不同的用户类型,分别通过不同的域登录, 并且实际上与相同的原始数据进行不同的交互我想要实现的是:
当访问者访问 example.com 时,SITE_ID = 1 的设置生效。
当访问者访问 training.example.com 时,SITE_ID = 2 的设置生效。
我想这样做是因为:
我想为不同的用户使用不同的 UserProfile 对象 我想在不同域之间随意混合和匹配视图和应用程序站点框架上的 Django 文档似乎对我没有帮助,尽管有这篇文章和其他一些文章,我可以看到一些可能性。
我目前的想法是使用 wsgi 服务器(在我的例子中为 uWSGI)来实际解决它,我将在其中获取 Django 的默认 wsgi.py,复制它,每个 wsgi conf 都会有自己的 Django settings.py。
那么服务器实际上将为两个不同的 wsgi 应用程序提供服务,即使它们使用许多相同的代码。
因此,在这种情况下,我的 Django 项目将具有:
example.com.settings.py (SITE_ID = 1) training.example.com.settings.py (SITE_ID = 2) example.com.wsgi.py(使用 example.com.settings.py) training.example.com.wsgi.py(使用 training.example.com.settings.py)我的场景应该可以工作,但是在同一个 Django 实例中解决这个问题的内存将是两倍。
对于我需要实现的目标有什么更好的实现吗?
【问题讨论】:
【参考方案1】:据我所知,settings.py 对于每个 django 项目都是唯一的,并且 SITE_ID 是在此级别定义的。恕我直言,最好的方法是将许多 django 项目与数据库路由器一起使用。在每个项目中,您可以定义 SITE_ID 以与 django 站点框架一起使用。 https://docs.djangoproject.com/en/dev/topics/db/multi-db/#database-routers
【讨论】:
设置在项目范围内,而不是应用范围内。 我的错。一直意味着项目以上是关于如何使用每个 SITE_ID 的唯一 settings.py 设置 django的主要内容,如果未能解决你的问题,请参考以下文章
如何在由“站点”框架提供支持的多个 Django 站点中获取唯一用户?
Django-cms:“设置”对象没有属性“SITE_ID”