Inhaltsverzeichnis


Robert Stein

Django CMSDjango

30.07.2017

Das sind die UnterschiedeDjango CMS Plugins und Apps

Egal ob als neuer Benutzer, oder als Entwickler, der Unterschied zwischen Plugins und Apps ist nicht immer sofort klar. Im Folgenden wollen wir den Unterschied sowohl für Anwender, als auch für Entwickler erklären.

clint-patterson

DJANGO CMS PLUGINS - LAYOUTING UND GROSSE FREIHEITE

Bei der Entwicklung von Templates in Django CMS werden sogenannte Platzhalter in diesen eingesetzt. Die Platzhalter können dann später von den Nutzern des CMS mit Plugins befüllt werden.

Plugins erlauben dem Nutzer Seiteninhalte zu erstellen und zu strukturieren. Vom einfachen Darstellen eines Bildes, über Tabellen, Videos, Kacheln ist wirklich alles möglich. Viele Plugins gibt es bereits für DjangoCMS, die Entwicklung von maßgeschneiderten Plugins ist sehr gut dokumentiert. Plugins werden immer innerhalb der Platzhalter eingesetzt. In der Strukturansicht kann man ihre Reihenfolge einfach per Drag’n’Drop manipulieren. In der Inhaltsansicht lassen sich ihre Inhalte einfach per Doppelklick bearbeiten.

text_edit_django_cms

Plugins sind verschachtelbar. Beispielsweise kann ein Textplugin auch Bilder enthalten.

Alle Plugins unterliegen dem Entwurf- und Veröffentlichen-Status einer Seite. Änderungen an Plugins werden also erst veröffentlicht, wenn der blaue Button „Änderungen Veröffentlichen“ oben rechts in der Toolbar betätigt wird.

DJANGO CMS PLUGINS - WAS SIND DIE STANDARDS?

Welche Plugins sind bei Django CMS vorinstalliert? Die Dokumentation von django CMS bietet eine Liste der django CMS Core Addons, welche mit der Installation des CMS bereits vorinstalliert sind. Diese umfasst die folgenden Plugins:

Natürlich ist dies nicht das Ende der Fahnenstange. Es gibt zahlreiche weitere Plugins, welche von der Community entwickelt, betreut und konstant verbessert werden.

Weiterhin besteht natürlich immer die Möglichkeit Individual- oder Neuentwicklung für Plugins zu betreiben. Später in diesem Artikel ist ein Absatz zur Entwicklung von Plugins zu finden – und es ist gar nicht so schwer, wie man denken könnte. Indem Blueshoe Github Repository sind eine unserer eigenen Entwicklungen zu finden.

KOMPLEXE ANSICHTEN UND ANWENDUNGEN IN DJANGO CMS

Django-CMS-Apps werden auf Seitenebene eingebunden. Sie können komplexe Zusammenhänge abbilden und erzeugen festgelegte Ansichten automatisch. Ihr Layout ist entsprechend oft statisch, jedoch ist die Verwendung von Plugins innerhalb von Apps nicht ausgeschlossen. Während sich die Funktionalität von Plugins auf ihre jeweilige Seite beschränken lässt, können Apps selbstständig Ansichten erzeugen. Ein typisches Beispiel für eine App ist ein Blog. Man aktiviert die App für eine Seite im CMS, z.B. /blog. Werden nun Artikel geschrieben, generiert die Blog-App selbstständig durchsuchbare Listen, Kategorie-Ansichten sowie die Detail-Ansichten der Blogeinträge. Ein weiteres Beispiel für eine App könnte ein Fragenbogen sein, welche vom Redakteur erstellt wird. Je nach Beantwortung der Fragen wird der Nutzer nach Abschluss auf eine speziell zugeschnittene Ergebnisseite weitergeleitet.

STANDARD-APPS IN DJANGO CMS

Mit der Installation von Django CMS werden keine Apps im Sinne eine Django CMS App installiert. Das hat den einfachen Grund, dass Apps immer spezielle Anforderungen abbilden, welche nicht auf alle Benutzer abgebildet werden können (im Gegensatz zu z.B. Text und Bild Plugin). Nicht jeder braucht zwangsweise einen Blog, oder eine Verwaltung und Darstellung für Events. Dahingehend verfolgt Django CMS das Prinzip den Kern der Software schlank zu halten und zusätzlich benötigte Komponenten nachträglich zu installieren. Dieses Github Repository bietet eine, leider nicht ganz aktuelle, aber umfangreiche Sammlung von guten Django CMS Add-ons (Plugins und Apps).

DER UNTERSCHIED ZWISCHEN APPS UND PLUGINS

Plugins dienen als Bausteine zur Gestaltung einer einzelnen Seite. Sie erlauben es dem Redakteur oder Editor auf den Seiten in Django CMS Inhalte einzupflegen und auf verschiedene Art und Weise darzustellen. Alle Einstellungen, welche für ein Plugin getroffen werden, gelten nur für die einzelne Instanz und nicht übergreifend. Plugins werden i.d.R. mehrmals im CMS verwendet. Ihre Inhalte können direkt aus dem Input der Benutzer des Systems kommen, aber auch über Schnittstellen und vom CMS generierte Daten (z.B. Listen von Artikeln).

Apps definieren die gesamte Funktion einer Seite im CMS. Sie haben die Möglichkeit über eine Seite hinaus weitere Ansichten (Unterseiten) zu erzeugen. Auch Apps haben sind über Einstellungen individualisierbar und können selber über Platzhalter verfügen, in welche wiederum Plugins eingesetzt werden können.

WIE ENTWICKELT MAN EIN DJANGO CMS PLUGIN?

Jedes Django CMS Plugin besteht aus drei Basiskomponenten: eine Konfiguration, einem Publisher und einem Template. Die Konfiguration entspricht leitet sich von der Klasse cms.models.pluginmodel.CMSPlugin ab, wobei diese selbst von der bekannten Django Model Klasse ableitet. Sie enthält alle wichtigen Einstellungen, welche benötigt werden um die jeweilige Instanz darzustellen:

class ImageWithCaptionModel(CMSPlugin):
    image = models.Imagefield(...)
    caption = models.TextField(...)

In dieser konkreten Klasse werden also die Daten gehalten, welche eine Instanz der Plugins dann später zur Darstellung von einem Bild mit Unterschrift verwenden kann.

Der Publisher ist im Django-Jargon die „Admin-Oberfläche“ zum jeweiligen Model. Die Klasse CMSPluginBase, welcher zur Erstellung dieser Publisher verwendet wird, leitet selbst auch die ModelAdmin Klasse ab. Publisher kontrollieren, wie die Daten ins Template gelangen, welches Template zum rendern verwendet werden soll, ob Caching beim rendern verwendet werden sollte, welche Felder der Konfiguration der Redakteur bearbeiten kann und einiges mehr.

class ImageWithCaptionPlugin(CMSPluginBase):
    model = ImageWithCaptionModel

Dies ist eine simple Version eines Publishers, welche es erlaubt neue ImageWithCaption Instanzen im CMS zu erzeugen, diese zu bearbeiten und zu löschen.

Zu guter Letzt benötigt man ein Template, welches vorgibt wie das Plugin auf einer Seite dargestellt wird. Es enthält alle Variablen, welche vom Publisher in den Kontext gegeben werden. Standardmäßig ist das die Instanz des Models.


{{ instance.caption }}

Die Entwicklung von Django CMS Plugins ist weitestgehend in der Dokumentation beschrieben.

WIE ENTWICKELT MAN EINE DJANGO CMS APP?

Eine Django CMS App ist im Grunde genommen eine normale Django App – mit ein paar Anpassungen. Wie bereits zuvor erwähnt werden Apps auf Seitenebene angelegt und zwar mit sogenannten Apphooks. Diese ermöglichen es dem CMS eine App, welche gegebenenfalls eine eigene Seitenstruktur mitbringt, einzubinden.

class ShowRoomApphook(CMSApp):
    name = _("Showroom")
    app_name = "showroom"

    def get_urls(self, page=None, language=None, **kwargs):
        return ["showroom.urls"]

apphook_pool.register(ShowRoomApphook)

In diesem Beispiel bauen wir eine Showroom-App – sie dient zur Darstellung der Kunstwerke eines Malers, welche die Webseite betreibt. Nachdem wir unsere URLs nun auch noch in die urls.py unseres Projektes eingetragen haben, ist prinzipiell der Django CMS spezifische Teil um:

url(r'^showroom/', include('showroom.urls', namespace='showroom', app_name='showroom')),

Die urls.py für die App selbst muss auch angelegt werden:

urlpatterns = patterns('showroom.views',
    url(r'^$', CategoryListView.as_view(), name='category_list'),
    url(r'^artpiece/(?P\d+)/$',
        ArtPieceListView.as_view(), name='artpiece_list'),
)

Nun erstellen wir 2 Models, damit wir die Werke in der Datenbank repräsentieren können:

class Category(models.Model):
    name = models.Charfield(...)
    slug = models.Charfield(...)
class ArtPiece(models.Model):
    name = models.Charfield(...)
    image = models.ImageField(...)
    category = models.Foreignkey('Category', ...)

Weiterhin benötigen wir nun Views, zur Darstellung der Kunstwerke im Browser:

class CategoryListView(ListView):
    model = Category
    template = 'category_list.html'

class ArtPieceListView(ListView):
    model = ArtPiece
    template = 'art_piece_list.html'

  def get_queryset(self):
        qs = super(...)
        cat_id = kwargs.get('cat_id', None)
        if cat_id:
            qs = qs.filter(category__id=cat_id)
        return qs

Diese benutzen wiederum 2 Templates zur Darstellung der jeweiligen Listen. Der CategoryListView gibt eine Liste alle Kategorien der Kunstwerke aus, der ArtPieceListView gibt eine gefilterte Liste der Kunstwerke (gefiltert nach Kategorie). Diese beiden Views werden nun den URLs im Apphook hinzugefügt und schon können wir unsere neue App verwenden. Natürlich müssen wir die Models vorher Migrationen durchgeführt werden.

Eine detailierte Dokumentation zum Erstellen von Apps in Django CMS ist hier zu finden: http://docs.django-cms.org/en/release-3.4.x/how_to/apphooks.html.

UNTERSCHIED UND GLEICHHEIT – DJANGO CMS APPS UND PLUGINS

Nachdem wir nun herausgestellt haben, wie sich die Unterschiede zwischen Apps und Plugins sowohl für Benutzer als auch für Entwickler darstellen sollte hier auch nochmal gesagt werden: Bei entsprechender Implementierung, kann man dieselbe Darstellung von bestimmten Problemen sowohl mit Apps als auch mit Plugins erreichen. Es gibt auch Problemstellungen, bei denen es nun nicht offensichtlich ist, ob man eine App braucht, oder ein Plugin. Dazu sollte man sich immer genau den Verwendungszweck anschauen, für welchen die Komponente erstellt wird. Sollen viele Informationen automatisiert dargestellt werden, werden Unterseiten gebraucht, bzw. Logiken und Workflows, welche sicher immer wieder wiederholen? Dann ist wohl in der Regel eine App die richtige Lösung. Wird viel Flexibilität in der Darstellung gebraucht und lässt sich kein Muster in der Verwendung erkennen, so sollte man eher dazu tendieren ein Plugin als Problemlösung herzunehmen.

Die Implementierung der Django CMS App ist auch auf Github zu finden: https://github.com/Blueshoe/django_cms_example.


Hast du noch Fragen oder eine Meinung? Mit deinem GitHub Account kannst Du es uns wissen lassen...


Was unsere Kunden über uns sagen

Ofa Bamberg GmbHRainer Kliewe
Ludwig-Maximilians-Universität MünchenProf. Dr. Mario Haim
Deutsches MuseumGeorg Hohmann
Fonds Finanz Maklerservice GmbHNorbert Porazik
Technische Universität HamburgSören Schütt-Sayed
  • Ofa Bamberg GmbH
    Ofa Bamberg GmbH
    B2B Online-Shop | B2C Website | Hosting | Betreuung | Security
    Rainer Kliewe
    © Ofa Bamberg GmbH
    Blueshoe betreut uns und unsere Webapplikationen seit vielen Jahren. Vom Online-Shop bis hin zu großen Teilen unseres Web-Umfelds hat sich das Unternehmen stets kompetent, verlässlich und vorausschauend gezeigt. Wir sind sehr zufrieden mit Blueshoe als Partner.
    Rainer KlieweGeschäftsführer
  • Ludwig-Maximilians-Universität München
    Ludwig-Maximilians-Universität München
    Plattformentwicklung | Hosting | Betreuung | APIs | Website
    Prof. Dr. Mario Haim
    Blueshoe hat unsere Forschungsdatenplattform Munich Media Monitoring (M3) entwickelt und uns hervorragend dabei beraten. Das Team hat unsere Anforderungen genau verstanden und sich aktiv in die Ausgestaltung der Software und der Betriebsumgebung eingebracht. Wir sind froh, dass auch Wartung und weiterführender Support in Blueshoes Händen liegen.
    Prof. Dr. Mario HaimLehrstuhlinhaber, Institut für Kommunikationswissenschaft und Medienforschung
  • Deutsches Museum
    Deutsches Museum
    Digitalisierung | Beratung | Datenbank-Optimierung | GraphQL | CMS
    Georg Hohmann
    Foto: Anne Göttlicher
    Im Rahmen eines komplexen Digitalisierungsprojekts für unsere Exponate-Datenbank war Blueshoe ein äußerst verlässlicher Partner. Sie haben uns nicht nur während des gesamten Projekts hervorragend beraten, sondern unsere Anforderungen perfekt umgesetzt. Dank ihrer Arbeit ist unsere Datenbank nun ein bedeutender Mehrwert für die weltweite wissenschaftliche Forschung.
    Georg HohmannLeiter Deutsches Museum Digital
  • Fonds Finanz Maklerservice GmbH
    Fonds Finanz Maklerservice GmbH
    Plattformentwicklung | Prozess-Systeme | Hosting | Betreuung | Zertifikate | Website
    Norbert Porazik
    © Fonds Finanz Maklerservice GmbH
    Blueshoe ist unsere verlängerte Werkbank für Entwicklung, Wartung und Support unserer Weiterbildungs- und Zertifizierungsplattformen. Das Team hat sich gründlich in unsere Abläufe eingearbeitet, und wir freuen uns, Blueshoe als zuverlässigen Partner an unserer Seite zu haben.
    Norbert PorazikGründer und Geschäftsführer
  • Technische Universität Hamburg
    Technische Universität Hamburg
    Plattformentwicklung | Beratung | Prozess-Systeme | Hosting | Website
    Sören Schütt-Sayed
    Seit 2019 unterstützt uns die Blueshoe GmbH tatkräftig bei der Entwicklung und Weiterentwicklung des "Digital Learning Lab" und der "Digital Learning Tools". Dank ihrer Beratung konnten wir von Anfang an auf eine zukunftssichere, moderne technische Struktur setzen. Die Zusammenarbeit ist reibungslos, und wir fühlen uns rundum gut betreut. Und davon profitieren dann auch die Lehrkräfte in Hamburg.
    Sören Schütt-SayedOberingenieur