如何设置django-cms项目以支持多个网站?
官方文档中没有提到这一点,邮件列表中只有有限的信息,但标题是“用于管理内容的分层页面的Django应用程序,可能是多种语言和/或多个站点”。并且通过Django Sites Framework已经内置支持,并且管理页面可以与不同的网站相关联。
相关:
答案 0 :(得分:10)
在Django-cms中有一些不同的选项来管理不同的网站(以及模板和页面内容)。
我最喜欢的可能是最简单的:
在我的virtualenv中,我有一个django-cms安装和一个包含我使用的所有模板的“项目”。
我有一个全局设置文件,每个网站只有一个文件,只导入所有全局设置并设置“SITE_ID”。
from base import *
SITE_ID = XXX
对于结构我通常有一个settings
文件夹,里面是空__init__.py
,base.py
有所有常见设置 - 包括django-cms设置,然后是不同的网站,例如。 site1.py
site2.py
等(有时我的结构甚至会稍微复杂一些,也可以考虑开发/生产,不同的机器等等,但这里不相关)。
我将每个网站作为一个不同的实例启动 - 我使用gunicorn也非常容易,每个都是不同的端口。
我的每个网站都有一个单独的server
配置的nginx,并且每个网站指向不同的枪支。
server {
listen 80;
server_name example1.com www.example1.com;
...
location / {
proxy_pass http://localhost:PORT;
}
}
任何gunicorn实例都可以访问管理员,所有数据都在一个数据库中共享,但为简单起见
这就是全部!
当然,它可以与Apache,mod_wsgi和不同的虚拟主机类似地完成。
我实际上将我的文件夹结构化为一个名为themes
的应用程序文件夹。每个主题实际上都是一个APP,但主要只包含templates
和static
个文件夹,并且它已添加到INSTALLED_APPS中。
这允许可爱的东西,例如继承和/或不同主题之间的覆盖。
还可以使用将从URL动态提取和设置SITE_ID的中间件。这允许有一个单一实例......但我认为这个解决方案没有任何真正的优势,而是发现它是潜在的风险来源。