12

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

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

有关的:

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

4

1 回答 1

10

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

基本方法

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

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

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

from base import *
SITE_ID = XXX

对于结构,我通常有一个文件夹,里面是settings一个空文件夹,一个包含所有常用设置的文件夹——包括 django-cms 设置,然后是不同的网站,例如。等等(有时我的结构甚至稍微复杂一点,也考虑到开发/生产、不同的机器等,但这在这里不相关)。__init__.pybase.pysite1.py site2.py

我将每个网站作为不同的实例启动——我使用 gunicorn,所以这也非常简单,每个网站都有不同的端口。

我有一个 nginx,前面server为我的每个网站都有一个单独的配置,每个网站都指向不同的 gunicorn。

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 的中间件。这允许有一个实例......但我没有看到这个解决方案有任何真正的优势,而是发现它是潜在的风险来源。

于 2013-09-24T10:10:10.037 回答