Ich werde einfach hier fragen, auch wenn das keine der viele Möglichkeiten war.
Was macht für dich ein CMS aus? Was unterscheidet PyLucid von dem django-cms.org-Projekt oder einer Anwendung, die ich einfach so mit Django baue? Was unterscheidet es von z.B. Plone?
Denkst du eher an ein "personal CMS" a la Wordpress, ein "community CMS" a la Drupal oder ein klassisches webbasiertes System wie z.B. Typo3 (oder eines der 100 anderen Projekte)? Gibt es ein zentrales Repository? Workflows? Soll es ein Portal sein? Was ist mit Widgets? Sind es fertiges Komponenten oder ist es ein Rahmenwerk? Was soll überhaupt verwaltet werden? Welche Aufgaben vereinfacht werden?
Du schreibst, es gibt hierarchisch angeordnete Seiten. Warum? Ich halte diesen Ansatz inzwischen für wenig flexibel und skalierbar, auch wenn ich ihm immer mal wieder begegne.
Stattdessen würde ich Content-Objekte (z.B. Nachrichten oder Fotos) beschreiben, erfassen, verschiedene Templates zur Darstellung definieren und dann Seiten aus diesen Templates kombinieren, sodass man etwa ausdrücken kann, dass die Startseite eine Nachricht sowie drei Teaser darstellen soll und die Archivseite wiederum alphabetisch sortierte Titel. Navigation und Verknüpfung der Seiten würde ich komplett trennen. Templates, Seiten und Navigation würde ich wieder als Content-Objekte auffassen.
Dies macht es einfacher, einheitlich Zugriffsrechte zu definieren, wenn man sie haben will. Ich würde allerdings vorschlagen, lieber auf das Wikiprinzip zu setzen und jedem Änderungen zu erlauben, die dann aufgezeichnet und die Content-Objekte so versioniert werden. Ich erwarte von einem CMS außerdem, dass ich einen guten Zustand als Snapshot "live" schalten kann. Währenddessen kann man natürlich die Seiten schon wieder ändern.
In welcher Form man Texte eingeben kann (ein weiteres Feature deiner Liste), halte ich für ein Rendering-Detail. Interessant ist vielleicht, eine ähnliche Flexibilität auch für Templates zu haben. Bei Apache Sling (der Basis von Days (einer der großen CMS-Anbieter) CMS) kann man relativ flexibel wählen, welche Programmiersprache für Scripts in Templates benutzt werden soll. Vielleicht haben sie es - Javabedingt - aber auch etwas mit der Generizität übertrieben.
Solltest du fragen, was ich mir von einem CMS wünsche, wäre dieses die Antwort: Ich hätte gerne ein Repository mit versionierten Content-Objekte und der Möglichkeit, den Stand zu einem Zeitpunkt zu fixieren. Dafür hätte dann gerne einen universellen, aber anpassbaren webbasierten Editor. Um Content-Objekte in HTML darzustellen, brauche ich eine erweiterbare Template-Sprache, mit der ich sowohl die einzelnen Fragmente einer Seite als auch die aus diesen Fragmenten zusammengesetzte Seite beschreibe.
Django bietet das meiste, jedoch nicht die versionierbaren Objekte.
Ich hatte schon einmal darüber nachgedacht, git als Basis für mein Repository zu nehmen. Eine relationale DB macht es IMHO zu schwer. Ein Content-Objekt sieht dann so aus:
Code: Alles auswählen
--
type: newsarticle
title: Was neues
keywords: neu new novo
format: markdown
--
Dies ist total neu.
Dies lege ich als "newsarticles/4211.yml" im Dateisystem ab. Der obere Teil kann beliebige Metadaten als Schlüssel-Wert-Paare umfassen. Der untere Teil ist ein Clob oder Blob. Da sich letzteres schwer mit einem normalen Texteditor bearbeiten lässt, will man das ganze vielleicht in zwei Dateien aufteilen. Für ein Bild gibt es dann eine "4211.yml" und eine "4211.jpg" Datei. Um zusammen mit einem Artikel auch weitere Ressourcen zu speichern, könnte es auch ein Verzeichnis "newsarticles/4211" geben, welches die "4211.yml" sowie weitere Verzeichnisse pro Ressource enthält.
Stefan