Django-cms用于多个网站

时间:2013-09-24 08:53:31

标签: django django-cms

如何设置django-cms项目以支持多个网站?

官方文档中没有提到这一点,邮件列表中只有有限的信息,但标题是“用于管理内容的分层页面的Django应用程序,可能是多种语言和/或多个站点”。并且通过Django Sites Framework已经内置支持,并且管理页面可以与不同的网站相关联。

相关:

Django-CMS: Multiple domains on same project

1 个答案:

答案 0 :(得分:10)

在Django-cms中有一些不同的选项来管理不同的网站(以及模板和页面内容)。

基本方法

我最喜欢的可能是最简单的:

在我的virtualenv中,我有一个django-cms安装和一个包含我使用的所有模板的“项目”。

我有一个全局设置文件,每个网站只有一个文件,只导入所有全局设置并设置“SITE_ID”。

from base import *
SITE_ID = XXX

对于结构我通常有一个settings文件夹,里面是空__init__.pybase.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,但主要只包含templatesstatic个文件夹,并且它已添加到INSTALLED_APPS中。 这允许可爱的东西,例如继承和/或不同主题之间的覆盖。

动态SITE_ID

还可以使用将从URL动态提取和设置SITE_ID的中间件。这允许有一个单一实例......但我认为这个解决方案没有任何真正的优势,而是发现它是潜在的风险来源。