CMSstash

Django CMS: Das flexible Python-System

Autor: Sebastian Schürmanns

Django CMS ist das wohl bekannteste Content Management System auf Python-Basis. Und wie der Name schon vermuten lässt, baut Django CMS auf dem Standard-Web-Framework Django auf. Die große Beliebtheit des CMS kann man am banalen Beispiel der Autoren-Anleitung erklären: Wo andere CMS ganze Handbücher schreiben, kommt das Tutorial von Django mit gerade einmal acht Seiten aus. Der Einstieg für Entwickler ist auch nicht wesentlich schwieriger. Gepaart mit der enormen Flexibilität und der wachsenden Beliebtheit von Python dürfte Django CMS noch viele weitere Freunde finden.

Django CMS von der Divio AG

Django CMS wird von dem schweizer Cloud-Anbieter Divio AG entwickelt und steht seit 2007 unter Open-Source Lizenz (BSD) zur freien Verfügung. Divio gehört gleichzeitig auch zu einem der großen Cloud-Hostern für Python, Django und Django CMS, allerdings lässt sich Django CMS auch problemlos auf jedem anderen Hosting-Anbieter nutzen, sofern er Python als Programmiersprache unterstützt.

Django CMS für Autoren

Django CMS hat einen sehr erfrischendes Autoren-Konzept: Die Seiten eines Webauftritts werden mehr oder weniger komplett im Frontend zusammengebaut. Bei Bedarf kann ein Admin-Bereich über die Hauptnavigation als Overlay eingeblendet werden, ansonsten kommt der Autor mit der sonst üblichen Administrations- und Autorenoberfläche nicht in Berührung. Damit gehört Django CMS zu den wenigen Systemen, die die inhaltliche Arbeit der Autoren höher priorisieren und die Verwaltungsoberfläche in die zweite Reihe verbannen.

Die Autorenoberfläche von Django CMS

Eine Seite besteht bei Django CMS aus verschiedenen Content-Blöcken und wird in einer Art WYSIWYG-Modus nach dem Lego-Prinzip erstellt. Inhaltsblöcke können in der linken Sidebar neu erstellt und sowohl in der Sidebar, als auch direkt im Content-Bereich bearbeitet und verschoben werden. Der Editier-Modus erscheint nach Doppelklick auf einen Inhaltsblock in einem Popup.

Job-Angebote für CMS-Experten

CMS-Experten wie Web-Entwickler, Produkt-Owner oder Projekt-Manager sind heiß begehrt. Daher bietet CMSstash in Zukunft ein Job-Board an. Job-Board ansehen

Jeder Inhaltstyp ist im Hintergrund ein eigenes Plugin. Dadurch können neue Inhaltstypen sehr einfach hinzugeschaltet werden. Per Default liefert Django-CMS verschiedene Standard-Typen wie Texte, Bilder, Dateien, Ordner, Links, HTML-Snippets, Google Maps, Videos und Spalten mit. Bereits mit diesen wenigen Inhalts-Typen dürften die Anforderungen der meisten Standard-Webseiten abgedeckt sein. Sollte ein Inhalts-Typ fehlen, kann man das Autorensystem nach dem Lego-Prinzip passgenau erweitern.

Ähnliche Konzepte sind auch von anderen Systemen bekannt, beispielsweise von dem Enterprise Java-CMS Adobe AEM oder von dem jüngeren PHP-System Sulu. Bei Django verblüfft jedoch die sehr gelungen Autorenführung: Durch die Modularität werden die Inhalte einer Seite zwar auch bei Django CMS in logische Einheiten zerstückelt. Durch die sehr direkte, einfache und selbsterklärende Umsetzung wird der Schreibprozess jedoch kaum unterbrochen oder beeinträchtigt.

Gerade wenn viele unterschiedliche Inhaltstypen erforderlich sind, kann Django CMS gegenüber Systemen mit einem zentralen Editor punkten: Während bei einem zentralen Editor die Autoren-Arbeit mit jeder separaten Zusatzfunktion abstrakter und komplexer wird, da die zusätzlichen Inhalte separat editiert werden müssen, bleibt der Abstraktionsgrad und die Komplexität bei Django CMS immer gleich, da sich die neuen Inhaltstypen nahtlos in das modulare Grundprinzip integrieren. Das macht Django zu einem der autorenfreundlichsten Systeme.

Django CMS für Entwickler

Auch für Entwickler ist der Einstieg in Django CMS vergleichsweise einfach. Das beginnt schon mit dem Installationsprozess. Zwar wird für die Installation anstelle eines web-basierten Wizzards die Kommandozeile genutzt. Dort ist es aber nach der Installation einer aktuellen Python-Version mit fünf kurzen Befehlen getan:

$ pip install --upgrade virtualenv
$ virtualenv env
$ source env/bin/activate // oder source env\bin\activate bei Windows-Systemen
(env) $ pip install djangocms-installer
(env) $ djangocms mysite

Nach dem Start des Servers kann man die neue Django-Website unter localhost besuchen und sich mit admin/admin einloggen:

python manage.py runserver

Die manuelle Installation von Django-CMS ist etwas ausführlicher in einer älterne Anleitung für Django CMS erklärt. Divio selbst beschreibt in seinem 60-minütigen Einführungs-Tutorial die Installation von Django CMS in der Divio-Cloud. Dafür werden allerdings zahlreiche Hilfs-Programme wie zum Beispiel Docker installiert, die nicht auf allen Systemen laufen.

Auch das Templating dürfte Frontend-Entwickler kaum vor große Hürden stellen, da Django CMS mit der Django Template Language (DTL) arbeitet, deren Syntax anderen verbreiteten Template-Sprachen wie Twig, Jinia oder Smarty ähnelt. Ein typisches Snippet für eine Artikel-Liste sieht so aus:

{% extends "base_generic.html" %}

{% block title %}{{ section.title }}{% endblock %}

{% block content %}
  <h1>{{ section.title }}</h1>

  {% for story in story_list %}
    <h2>
      <a href="{{ story.get_absolute_url }}">
        {{ story.headline|upper }}
      </a>
    </h2>
    <p>{{ story.tease|truncatewords:"100" }}</p>
  {% endfor %}
{% endblock %}

Wer schon einmal mit einer Template-Sprache gearbeitet hat, kann die DTL-Dokumentation kurz überfliegen und anschließend relativ intuitiv seine Templates für Django CMS bauen.

Bei der Addon-Entwicklung steigt man dagegen tiefer in die Python-Welt ein. Mit Addons lassen sich zum Beispiel neue Inhalts-Typen erstellen, die von den Redakteuren in der Admin-Oberfläche genutzt werden können. Wer nicht aus der Python-Welt stammt, dürfte eine kleine Lern-Kurve vor sich haben. Ein verkürzter Ausschnitt aus dem Plugin-Tutorial von Divo zeigt jedoch, dass die Entwicklung mit Python und speziell mit Django-CMS sehr sauber und übersichtlich ist.

Für das Beispiel-Addon wird zunächst ein Model erstellt:

# -*- coding: utf-8 -*-
from django.db import models
from django.utils.encoding import python_2_unicode_compatible

from cms.models import CMSPlugin

@python_2_unicode_compatible
class Social(CMSPlugin):
    label = models.CharField(
        blank=True,
        max_length=200,
    )

    def __str__(self):
        return self.label 

Anschließend wird mit dem Model das eigentliche Addon erstellt und im Django-CMS registriert:

# -*- coding: utf-8 -*-
from cms.plugin_base import CMSPluginBase
from cms.plugin_pool import plugin_pool

from . import models

class SocialPlugin(CMSPluginBase):
    model = models.Social
    name = 'Social Plugin'
    render_template = 'my_custom_social_addon/social.html'
    allow_children = True
    child_classes = ['SocialIconPlugin']

plugin_pool.register_plugin(SocialPlugin)

Abschließend muss nur noch das nötige Template (social.html) mit der Template-Sprache DTL erstellt werden. Auch ohne Vorkenntnisse in Python wirkt die Logik recht einfach und die Syntax sehr aufgeräumt. Wer tiefer in die Materie einsteigen will, sollte die sehr einfach geschriebene Academy von Divio durchgehen.

Django CMS für Nicht-Entwickler

Django CMS bietet ein ausgesprochen nutzerfreundliches Autoren-Interface an, richtet sich aber in erster Linie an Entwickler. Dementsprechend gibt es zwar sehr viele Addons im Marketplace, allerdings keine Themes. Themes werden grundsätzlich von Entwicklern individuell erstellt. Ein Self-Service System vergleichbar mit WordPress ist Django CMS daher nicht. Für Code-Neulinge dürfte Django allerdings einen sehr guten Einstieg in die Python-Welt bieten und ist daher sicher einen Versuch wert.

Kosten

Django ist Open Source und steht unter BSD-Lizenz, ist also kostenfrei nutzbar. Kosten entstehen durch die Entwicklung individueller Themes und Erweiterungen. Im Vergleich zu PHP und JavaScript dürften Python-Entwickler zwar etwa seltener sein. Jenseits von JavaScript und PHP gehört Python im Web-Bereich jedoch zusammen mit Java zu den beliebtesten Programmiersprachen, sodass man Freelancer oder Dienstleister immer noch problemlos finden dürfte.

Einsatzfelder für Django CMS

Django CMS versteht sich als Enterprise CMS und wird von großen Unternehmen wie National Geographic, der NASA oder L'Oreal Men Expert genutzt. Das ist allerdings eher ein Zeichen für die enorme Flexibilität von Django CMS als ein Argument gegen den Einsatz bei einfacheren Anforderungen. Ganz im Gegenteil: Das extrem simple und selbsterklärende Autoren-Konzept, die schlanke Basis bei der Erst-Installation und die einfache Entwicklung machen Django CMS zu einem guten Kandidaten für jede Art von Webseite, auch und gerade für den Mittelstand oder sogar für KMUs.

Auch andere Experten lesen gerne gute Inhalte und freuen sich, wenn Du diesen Artikel zum Beispiel über Twitter teilst. Auf Twitter gibt es außerdem von @CMSstash tägliche Updates.

Zuletzt aktualisert: 15.06.2018