问题 Django-cms用于多个网站


如何设置 Django的CMS 项目支持多个网站?

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

有关:

Django-CMS:同一项目中的多个域


12557
2017-09-24 08:53


起源

这是邮件列表上一个经常出现的问题,所以我想我会在很容易找到的地方添加我的答案...... - Stefano


答案:


在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也非常容易,每个端口都是不同的。

我有一个单独的nginx前面 server 我的每个网站的配置,以及每个网站的不同枪支。

server {
    listen      80;
    server_name example1.com www.example1.com;
    ...
    location / {
        proxy_pass  http://localhost:PORT;
    }

}

任何gunicorn实例都可以访问管理员,并且所有数据都在一个数据库中共享,但为简单起见

就这样!

当然,它可以与Apache,mod_wsgi和不同的虚拟主机类似地完成。

高级

主题

我实际上构建了我的文件夹,以便调用一个apps文件夹 themes。每个主题实际上都是一个APP,虽然大多只包含 templates 和 static 文件夹,它被添加到INSTALLED_APPS。 这允许可爱的东西,例如不同主题之间的继承和/或覆盖。

动态SITE_ID

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


10
2017-09-24 10:10



知道怎么在所有网站上都有这样的页面吗?比如'about'页面。关于它的邮件列表上有一个未解答的问题。 - straykiwi
对不起@straykiwi - 不知道我会怎么做。我想扩展这个答案,因为我做了一些进一步的改进(例如设置权限,以便只有超级管理员可以看到所有不同的网站,然后有一个组只供用户访问各个网站) - 但我因为我从那时起搬到了另一家公司,所以再也无法轻松访问django-cms系统了。 - Stefano
这仍然是你今天这样做的方式吗?不同的网站使用不同的模板吗? - ratatoskr
对不起@ratatoskr,但我之前的评论仍然有效:我目前没有使用django-cms ... - Stefano