Summary: Herein the author finds that Django-cms is a pretty decent content management system.
I’ve finally gone live with the site for my new initiative: coopercate.org. As part of my effort to research the Django ecosystem, I decided to give a pre-packed CMS a try. There were two contenders: django-cms and Ella. Though Ella looked good, it appeared to be less mature than django-cms. So my efforts stayed focused on deploying django-cms and I never needed to fall back to Ella. It looks like Django-cms is going to meet my needs.
There are two branches in the django-cms repository: trunk and cms2. It looks like cms2 is getting regularly merged in the trunk as features mature. At the time of my deployment there was a note in the wiki stating that django-cms is not compatible with the latest Django releases (which I needed for a different project), so I used the older r41 version that is downloadable from a link on the top-right corner of the home page.
It should be understood that r41 is fairly old—it is the original release from September of 2008. A lot of development has occurred since then which can be viewed on their demo site. I plan to install the newer version as soon as Django compatibility has been restored.
The installation instructions were sufficient to get django-cms up and running. Now that django-cms is successfully deployed, I want to document a couple of gotchas.
Two prerequisites are listed: django-tinymce and django-filebrowser. Both prerequisites are optional, and in fact I only have them partially working as of now. They add some niceness, especially when building a site for a non-technical client, but they are not essential for the CMS to function.
I got django-filebrowser from SVN. Following the instructions resulted in what looks like a working link on the admin web site, but I haven’t tested the functionality much yet.
I symlinked cms_global_settings.py and cms_settings.py into my project directory so that I could just override the variables I cared about in settings.py. I turned off LANGUAGE_REDIRECT and USE_I18N for my site. It is also important to make sure to have the DEFAULT_TEMPLATE set correctly. It appears to be relative from my project templates directory.
The only step left was to copy cms/templates/base.html into my project’s templates folder and customize it. Now I have a functioning site.
There are two areas where I find django-cms’s interface to be rather confusing.
- I don’t understand their distinction between a page and the content on the page. Each page can have multiple “contents”, but only the most recent one shows up on the live site. I am probably exposing my ignorance about content management systems in general.
- I don’t see an easy way of making django-cms display a list of all child pages on a specific page. Third-tier pages do not show up on the site navigation, so the only way I see to link to them is by manually maintaining a menu.
Django-cms appears to have a decent user community and active development. Deployment wasn’t as easy as a PHP CMS, but it was easy by Django community standards. Though django-cms has seen a lot of activity recently, the older version I deployed is very functional and has had few quirks once I got it set up correctly. On the whole, I like it.