[Solved]-Django-cms for multiple websites


there are a few different options to manage different websites (and, thus, templates and page contents) in Django-cms.

The basic approach

My favorite is probably the simplest:

In my virtualenv I have a single django-cms installation AND a single “project” that contains ALL the templates I use.

I have a global settings file plus one for each website that does only import all global settings and set “SITE_ID”.

from base import *

For structure i usually have a settings folder, an empty __init__.py inside, a base.py with all the common settings – including django-cms settings, and then the different websites eg. site1.py site2.py etc. (sometimes my structure is even slightly more complex to also account for dev/production, different machines, etc. but that’s not relevant here).

I launch each website as a different instance – I use gunicorn so that’s extremely easy too, each one of a different port.

I have an nginx fronted with a separate server configuration for each of my websites, and each of these points to a different gunicorn.

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


Any of the gunicorn instances can access the admin, and all the data is shared in a single database, but for simplicity

That’s all!

Of course it can be done similarly with Apache, mod_wsgi and different virtualhosts.



I actually structured my folders to have an apps folder called themes. Each theme is actually an APP, though mostly contains only the templates and static folders, and it’s added to the INSTALLED_APPS.
This allows for cute things such as inheritance and/or overriding between different themes.

Dynamic SITE_ID

It’s also possible to use a middleware that will dynamically extract and set the SITE_ID from the URL. This allows to have one single instance… but I don’t see any real advantage in this solution and rather find it a potential source of risks.

Leave a comment