As a web developer, I often need to answer questions such as 'which cms system should I use to blah blah ', in most cases, my answer is 'just use wordpress!'. However, if you are a python developer who wants to build a personal tech blog using python, or you need to integrate CMS system into your existing django application, you might want to know the difference between Wagtail and Django-CMS, the two most popular CMS framework in Python world. That is why I wrote this blog post to help people like me to make a good choice.
Something in common
Django-CMS and wagtail are both based on Django framework, they are open source projects on github, have active maintainers to deal with github issues and github PR. You can also get more services such as export support, hosting from their official websites, of course, not free.
From the report of djangopackages.org and the official online docs , we know that most functions in a popular CMS are implemented in both frameworks. For example, WYSIWYG Editor, page hierarchy, tags, etc..
First, talk about UI
Ok, Here is the most important part you care about. the difference. Let's first look at the UI interface.
Below is the screenshot of the admin page of the Django-CMS.
As you can see, it is very similar to the classic django admin page. I really doubt that Django-CMS use some code of django admin, after google, I found some clue from a third-party project based on Django-CMS. Here is the quote from
djangocms-admin-style readme file.
The django CMS Admin Style overrides django admin's
base_site.html, but you can still partially customize this page.
So Django-CMS might use the django admin as its admin page, it create custom templates to make the page look more decent. But this implementation also brings some problem, If your existing application which have existing admin app want to integrate Django-CMS to add some CMS functions , Django-CMS might not work very well in this scenario. Actually, I have checked the online official doc of Django-CMS, I can not find any words talking about integrating Django-CMS to existing Django app, which means, Django-CMS might only be used as a stand-alone project. I think you should really care about this poing when implementing CMS in python world.
Above is the screenshot of the create new page. You can quickly create content using this page. WYSIWYG editor can help people create rich text content in easy way.
Here is the end of UI preview of Django-CMS, now we move to Wagtail.
Wagtail implemented its own admin interface from scratch, which means you can have one admin interface for your existing app, and another wagtail admin interface to manage all things about CMS. For example, you can set
admin as classic django admin url, and
cms_admin as wagtail admin url entry, you can easily integrate a new wagtail app into your existing django app so they can coexist. Actually, this feature has been discussed in detail in doc of wagtail and I am pretty sure most people will like it.
Above is the screenshot of the admin page of the Wagtail, as you can see, you have more control in wagtail compared with Django-CMS.
Second, talk about project
It seems Django-CMS has been released since 2007, the framework structure is very stable and mature, it brings many built-in features, so you can get started easily. In many cases, you can just get the work done by implementing some frontend templates to show the content.
However, this big framework is somewhat complex to make it hard to do some custom work such as extending the data model, add some new feature. You can not get job done through the official doc but you need to spend time to dive into the code to get the job done. In short, this framework seems more like a black box compared to Wagtail. If you can not get your job done by using the built-in components or third-party plugins, then you might need much more time to read the code and get job done.
Wagtail has been realeased since 2014, even it show up much later than Django-CMS on github, they all have received 4000+ stars on github.com, which means Wagtail is very popular in the community. From the pull requests and issues, it seems it is still under rapid developing and I believe it would overtake Django-CMS by popularity in Github soon.
The biggest advantages of Wagtail is the flexibility, you can easily extend the model to add more custom function to meet the demands of clients, this feature is very important because Python did very well in prototype product development. As mentioned above, Wagtail can work very well with other django application, so you can easily integrate CMS into your existing project to do something like content marketing.
Third, talk about third party plugins
Both frameworks have rich third-party extensions so you can check the list before you get started, for example, you can try to take a look at the puput project before implementing a personal blog using wagtail.
Below is part of awesome-django-cms
aldryn-forms — dynamic forms builder aldryn-gallery — Gallery Plugin aldryn-mailchimp - MailChimp integration cmsbootstrap — Hit the ground running with an extensible theme based on Twitter Bootstrap. djangocms-accordion - Accordion Plugin cmsplugin-contact — Contact plugin for django-cms with spam protection and i18n cmsplugin-contact-plus — form builder for cms with spam protection cmsplugin-filer — django-filer plugins cmsplugin-forms-builder - django-forms-builder integration with django-cms cmsplugin-sections - Section plugin (very useful for one-page sites) ......
Below is part of awesome-wagtail
Puput - Puput is a powerful and simple Django app to manage a blog. It uses the awesome Wagtail CMS as content management system. wagtail-readability - Test how readable the content you enter into Wagtail is. Wagtail TinyMCE - A TinyMCE editor integration for Wagtail. django-oscar-wagtail - Wagtail integration for Oscar Commerce (or Oscar Commerce integration for Wagtail?) Wagtail Analytics - A Google Analytics dashboard in your Wagtail admin. ......
From the third-party extension list, the count of extension in wagtail is much bigger, so we can conclude that Wagtail is much more popular in the developer community.
So which one is the winner? If you want a CMS project written in python, and the functions of it can meet the existing demand which will not change much in the future, Django-CMS might be your choice. If you want more control of the CMS project, or want to integrate it into existing django project, or you want to learn some django skills by implementing a simple blog, then Wagtail might be the winner here.
|Github||4966 stars, since 2010||4424 stars since 2014, increasing quickly|
|Main Feature||Brings with many built-in models, easy to get started, but not easy to extend||Very flexiable, easy to extend, it would take you sometime at first, but will save you a lot of time when extending the application|
|UI||Use django admin interface as its admin entry, not suitable with other django app which have custom admin interface||Have its own admin entry, can coexist with django classic admin url|
Other articles talking about differences between Wagtail and Django-CMS
For people who like to read ebook instead of blog posts, I have published a book on leanpub，where you can get pdf, epub, mobi version of this Wagtail book Build Blog With Wagtail CMS.