Django CMS positions itself as a viable alternative to the market leaders in the area of web content management (WCM). We were interested in whether an open-source product really can compete against the likes of the firmly established solutions in the market.
This article examines how Django CMS stacks up against some of its competitors.
As the name suggests, Django CMS is based around the open-source, Django Web Framework. Django is a MVC (Model-View-Controller) framework for Python development akin to Rails for Ruby, Spring MVC in the Java world, and ASP.Net MVC for Microsoft fans.
Using the MVC design pattern accelerates development time by ensuring a clear separation of UI elements, business logic, and data. Django, like its pears, is all about rapid development.
Django CMS was released in 2007 by software solutions company, Divio, who continue to provide support and hosting services.
There is evidence that the CMS is gaining traction in the market with big brands such as L’Oreal, English National Ballet, Bonduelle, and Ubuntu, trusting the product with their websites.
We have a look at some of its features in more detail in the following section, but generally it ticks all the boxes in terms of bread and butter CMS functionality such as: multi-language, multi-site, workflow management, security, extensibility, content tagging, search, and out-of-box components (such as polls and comments). In addition to these a marketplace is available for free and paid add-ons (similar to WordPress).
Enterprise CMS Comparison
Despite being a free, open-source product Django CMS has been touted as an “enterprise” product, suitable for development of large-scale, complex, distributed, and transactional web applications.
We were interested in how Django CMS would stack up against some of the more established products in the sector. The following table provides an enterprise feature comparison against some of the CMS products we have recently been working with:
|Clustering (high availability and load balancing)||No||Yes||Yes||Yes||Yes|
|Transactional activation (multiple public instances)||No||Yes||Yes||Yes||Yes|
|3rd Party Data Connectors||Yes*||Yes||Yes||Yes||Yes|
* Community add-on
Where Django CMS Falls Short
As the table above shows there are some areas where Django CMS falls short in terms of its enterprise credentials. These are examined below.
Separation of Content Authoring and Rendering
Out of the box, Django CMS does not separate between a web application used for content editing and one for content rendering. Both are handled using a single instance. For complex environments where separation would be useful (for example, to handle high volume of requests) the application could be scaled vertically, by serving it from multiple instances using a single powerful database or database cluster. To separate between content editing and rendering, real-time replication could be established between two databases (for example using the Percona tools for MySQL or the built-in replication provided by Postgres) and dispatch requests for editing content to the master database and requests for serving read-only content to a replica.
Django lacks mobile preview capabilities for pages, but both the administration pages and most of the templates are mobile friendly.
Personalisation does not come out-of-the-box with Django CMS itself, but can be added with the Aldryn Segmentation plugin:
However, this has limited functionality at the moment when compared to alternative CMS solutions.
Django CMS Impressions
Django CMS has a marketplace for free and paid add-ons. This includes plugins for forms, FAQs, Disqus, Google Analytics, MailChimp, News, Blogs, Facebook, etc.
Authentication and Authorisation
Django CMS comes with a built in user management mechanism handles the management of CMS users. Through plugins there are also end-user management mechanisms, support for user registrations (including email confirmations), and screens for profile editing.
Page Hierarchy Administration
Through the administration area or CMS toolbar, the page hierarchy tree can be accessed for editing. The hierarchy created will be rendered on the website according to the HTML templates.
Since Django CMS v2.4, there have been two versions for every page; a live one that is viewable on the website and a draft one available for logged-in content editors only. By default, content editors are able to make changes to the draft versions and users with the administrator role have publishing rights.
Before 2.4 there was a more complex workflow engine with hierarchical publishing rights, but for the purpose of maintainability it was removed from future versions.
Content Editor View:
Django CMS Toolbar provides quick access to the most common CMS features e.g. Add a new page, edit a page, etc. It is highly customisable and allows developers to add/remove both built-in and custom items depending on the needs of the application.
Django CMS supports editing of page’s content and template layout.
Pages can be edited in “Structure” mode for editing the page layout and “Content” mode for editing of page content.
There is no inline editing that would allow users to directly edit content in the page as if they are using a document editor such as Word or InDesign, but content blocks are clearly marked and when clicked on open the Rich Text Editor.
Historical versions of each page are stored in Django CMS allowing users to easily rollback if required. Through the history tab on the toolbar, authorised users can access all previous versions of a page along with useful information such as the date/time that a change took place, the user that made the change, and any comments entered.
Every page in Django CMS can have multiple language versions. This allows content editors to add translated content and can also be used to give pages a different layout for a particular version.
Django CMS is powerful, customisable, extensible, and easy-to-use for content editors and developers alike.
Built on the Django framework for rapid development, it really is possible to set up and start projects in a matter of minutes.
It is a great solution for brochure-like sites, blogs, and simple web applications.
It falls short in a few areas when compared to truly enterprise-class products, but can come pretty close if using some of the many available add-ons available in the marketplace.
The large and highly active community behind Django CMS (and the Django framework) is a real bonus, with plenty of plugins readily available and many more being developed.
Overall, we feel it’s a great product for small to medium scale web applications.