Seite 1 von 1

Genshi, die neue beste Template-Engine?

Verfasst: Freitag 22. September 2006, 23:47
von Y0Gi
Wo ich gerade schon mal hier bin und die Software-Liste im Sticky-Thema sah: Vor einigen Tagen ist die Version 0.3 der Template-Engine Genshi erschienen (die bis dahin ungünstigerweise 'Markup' hieß; mit der 0.3 funktioniert nun auch die Installation via easy_install).

Das Ding wurde massiv von Kid inspiriert, macht aber einiges besser. So wurde einer der größten Schwachpunkte von Kid ausgemerzt: Ein eigener Parser ermöglicht nun die exakte Angabe von fehlerhaften Stellen im Template (wodurch dann auch die Abhängigkeit von ElementTree entfällt). Weiterhin werden die Templates nicht mehr in Python-Code (.pyc) kompiliert, das ganze ist aber den Benchmarks nach auch so schon ein wenig schneller.
Auch kann man Attribute (es sind auch einige neue hinzugekommen) wie py:if oder py:for direkt als Element verwenden, spart so viele py:strip="" und auch das End-Tag ist nun entsprechend aussagekräftiger. Last but not least ist es auch möglich, Text-Templates zu verwenden, wenn es denn gerade keine XML-Ausgabe sein muss.
Eingebunden werden Templates nun über XInclude, was es sehr viel verständlicher macht.

Nach unzähligen grausamen TEs in PHP und der Erkenntnis, dass TAL/TALES/METAL (in Form von SimpleTAL) auch nicht der Weisheit letzter Schluss ist, bin ich mit Kid insofern glücklich gewesen, da es IMHO deutlich angenehmer war als alles, was mir bisher untergekommen war (und nein, die TE von Django finde ich nicht gut, gar nicht; ClearSilver, Cheetah, Jinja und all die anderen haben mich auch zu keinem Zeitpunkt ausreichend überzeugt). Nun ist aber tatsächlich Genshi erschienen und ich bin hellauf begeistert, räumt es doch mit den kleineren und größeren Schwächen von Kid auf, die ich bisher im Freundentaumel ignoriert habe und scheint in allen Punkten das zu sein, was ich mir als Entwickler seit vielen Jahren gewünscht habe. Die Migration von Kid ist übrigens verhältnismäßig schnell erledigt. Also, schaut es euch *unbedingt* an!

Website: http://genshi.edgewall.org/
Kommentar dazu von mir: http://homework.nwsnet.de/releases/b9a6 ... le-brother

Verfasst: Samstag 23. September 2006, 10:44
von jens
Also irgendwie kann Genshi eine menge mehr als nur ein Template zu füllen :)

Ich muß sagen das ich mit jinja sehr glücklich bin. Das entwickeln eines Templates mach eigentlich richtig Spaß (im vergleich zu simpleTAL).

Verfasst: Samstag 23. September 2006, 11:46
von Y0Gi
Bei SimpleTAL hat mich persönlich sehr schnell gestört, dass es quasi eine zweite kleine Template-Sprache darin neben richtigem Python (wie bei Kid und Genshi) gibt. Da muss man dann immer Pfad-Ausdrücke zu python:-Ausdrücken umwandeln, wenn man etwas mehr Power braucht und das hat endlos genervt. Aber angesichts des Hintergrundes von TAL, nämlich Zope, wo Templates auch von Benutzern erstellt werden können und daher nur beschränkte Rechte haben sollen, macht das ja durchaus Sinn. Nur für Projekte, in denen nur die Entwickler die Templates bauen, ist das eben unangebracht und hinderlich.

Ich will Jinja nicht runtermachen, keineswegs. Es ist nur deshalb nichts für mich, weil ich eben XML-Templates zu schätzen weiß, wo ich mit Attributen arbeiten kann und ohne End-Konstrukte (außer ich benutze Elemente etwa für for-Loop) auskomme. Zudem ist das immer gültiges XHTML. Die Leute, die dann Djangos Engine hervorgehoben haben, weil die ja toller als Kid (Django vs. TurboGears) wäre, weil sie ja auch Email-Texte und dergleichen erzeugen kann, haben natürlich mit Genshi jetzt noch weniger zu lachen ;)

Letztlich kann der Entwickler (hoffentlich!) für sich entscheiden, was ihm am meisten zusagt.

Ach ja: Kevin Dangoor ist sehr von Genshi angetan und will es wohl ab TG1.1 zum Default machen (Kid und andere Engines gehen natürlich weiterhin, und Buffet gibt es ja auch noch).

Verfasst: Samstag 23. September 2006, 15:00
von Leonidas
Hallo Y0Gi, willkommen im Forum,
Y0Gi hat geschrieben:Es ist nur deshalb nichts für mich, weil ich eben XML-Templates zu schätzen weiß, wo ich mit Attributen arbeiten kann und ohne End-Konstrukte (außer ich benutze Elemente etwa für for-Loop) auskomme. Zudem ist das immer gültiges XHTML.
Ja, das fand ich damals an Kid so toll, aber als ich damit gearbeitet habe war es auf eine seltsame Art broken, so dass ich damit leider nicht so viel Spaß hatte.
Y0Gi hat geschrieben:Die Leute, die dann Djangos Engine hervorgehoben haben, weil die ja toller als Kid (Django vs. TurboGears) wäre, weil sie ja auch Email-Texte und dergleichen erzeugen kann, haben natürlich mit Genshi jetzt noch weniger zu lachen ;)
Das hat nichts mit besser oder schlechter zu tun, sondern von den Anforderungen. Mit Kid oder Genshi kann man valides XML erstellen was natürlich vorteile hat, zum Beispiel dass man die Templates sogar im Browser betrachten kann. Jedoch kann man eben nur XML-Dokumente damit erstellen, was - das muss man zugeben - auch das Hauptziel solcher TEs ist. Dagegen sind Django/Jinja und Cheetah eher allgmeiner ausgerichtet. Ich persönlich nutze meist Djangos TE, die ich eigentlich ganz brauchbar finde, da mir Template-vererbung gefällt und die Filter find ich auch gut. Wobei die FIlter etwas beschfänkt sind, wenn man eigene FIlter erstellen will, die mehrere Parameter nutzen. Das soll laut blackbird in Jinja besser gelöst sein.
Y0Gi hat geschrieben:Ach ja: Kevin Dangoor ist sehr von Genshi angetan und will es wohl ab TG1.1 zum Default machen (Kid und andere Engines gehen natürlich weiterhin, und Buffet gibt es ja auch noch).
Ja, Edgewall hat letztens angefangen ziemlich viele brauchbare Komponenten zu releasen: Trac, Genshi usw. Aber Django ist auch nicht an seine eigene Template-Engine gebunden: Myghty und ZPT gehen auch. Eine Cheetah-Anbindung gab es auch mal. Somit könnte man, wenn man unbedingt will auch Buffet oder Genshi anbinden. Zwar nicht out-of-the-box aber immerhin.

Re: Genshi, die neue beste Template-Engine?

Verfasst: Samstag 23. September 2006, 15:09
von Y0Gi
Hauptstreitpunkt bei TEs ist ja gewöhnlich XML-basiert ja/nein.

Aber wie ich (zugegeben, leicht versteckt) schrieb:
Y0Gi hat geschrieben:Last but not least ist es auch möglich, Text-Templates zu verwenden, wenn es denn gerade keine XML-Ausgabe sein muss.
Dieses Feature ist erst kürzlich hinzugekommen und noch nicht sonderlich weit entwickelt, jedoch basierend auf den Fähigkeiten und dem Konzept von Genshi profitiert es vom XML-Pendant. Ich habe also darauf angespielt, dass die nur-XML-ist-doof-Fraktion sich möglicherweise auch mit Genshi anfreunden kann, sind doch die oft genannten (Schein-)Argumente hiermit nicht mehr wirksam. Deswegen habe ich noch lange nichts gegen TEs wie Cheetah, Djangos Engine, Jinja und Konsorten. Aber jetzt gibt es eine Engine, die beides kann, und zwar ziemlich gut.

Gegenüber Django wurde ja oft kritisiert, dass man mit der TE eine neue Sprache lernen muss, und das ja auch nicht ganz zu Unrecht. Da profitieren Kid und Genshi durch die Verwendung von Python (nicht die Einbindung) schon, man könnte sogar eine Parallele zum Erfolg von PHP sehen, wo die "Template-Fähigkeit" einfach auf der Einbettung der Sprache ins (X)HTML beruht.

Ich möchte hier keinen Flamewar lostreten, sondern habe nur versucht, Genshi bekannt zu machen und darzulegen, warum ich aufgrund meiner Erfahrungen höchst positiv davon angetan bin.

Verfasst: Samstag 23. September 2006, 15:20
von mitsuhiko
Ich beobachte die Entwicklung von Markup schon länger und war eigentlich ganz positiv überrascht. Die Templates sind schön aufgeräumt und mit dem neuer neuen text Engine ist das ganze Ding auch für ASCII Dateien brauchbar.

Ich hab schon mal gesagt das, hätte es diese Engine vor einem Jahr gegeben hätte ich kein Jinja entwickelt. Allerdings sind hier doch noch feine Unterschiede. Jinja ist zum Beispiel sandboxed und hat Erweiterungen für for-Schleifen und ähnliches.

Aber ich bin ernsthaft am Überlegen ob nicht Markup aka Genshi ein ernsthafter Ersatz für jinja in pocoo ist.

Re: Genshi, die neue beste Template-Engine?

Verfasst: Samstag 23. September 2006, 15:22
von Leonidas
Y0Gi hat geschrieben:Hauptstreitpunkt bei TEs ist ja gewöhnlich XML-basiert ja/nein.
Exakt :)
Y0Gi hat geschrieben:Deswegen habe ich noch lange nichts gegen TEs wie Cheetah, Djangos Engine, Jinja und Konsorten. Aber jetzt gibt es eine Engine, die beides kann, und zwar ziemlich gut.
An sich hätte ich schon ganz gerne in Django eine wirklich brauchbare Template-Engine die beides kann. Allerdings ist es auch Einstellungssache: Ich bin meist zu faul XML zu Tippen, wenn ich mit nur-Text zum gleichen Ergebnis komme ;)
Y0Gi hat geschrieben:Gegenüber Django wurde ja oft kritisiert, dass man mit der TE eine neue Sprache lernen muss, und das ja auch nicht ganz zu Unrecht.
Dies halte ich für ein sehr schwaches Argument - die Django-Template Sprache ist total simpel und Templates sind einfacher zu erstellen als mit, sagen wir, simpleTAL.
Y0Gi hat geschrieben:Ich möchte hier keinen Flamewar lostreten, sondern habe nur versucht, Genshi bekannt zu machen und darzulegen, warum ich aufgrund meiner Erfahrungen höchst positiv davon angetan bin.
Ein Flamewar ist das hier keineswegs. Ich möchte dir danken, dass du Genshi vorgestellt hast. Das nächste mal wenn ich eine Template-Engine benötigen werde und Django nicht verwenden werde, werde ich überlegen ob ich nicht Genshi auspropiere. Vielleicht macht ja sogar jemand ein Genshi-Binding für Django?

Verfasst: Freitag 6. Oktober 2006, 15:35
von 7crystal7
TAL ist doch toll, weiß gar nicht was ihr habt :D

Verfasst: Dienstag 10. Oktober 2006, 16:53
von Y0Gi
7crystal7 hat geschrieben:TAL ist doch toll, weiß gar nicht was ihr habt :D
Wie ich schon schrieb ist TAL durch Zweigleisigkeit, die ja für die Beschränkbarkeit der Ausdrücke im Template existiert, gerade bei Änderungen oft im Weg und irgendwo "doppelt gemoppelt". Überall 'python:' vor zu schreiben, ist auch keine annehmbare Lösung.

Verfasst: Mittwoch 18. Oktober 2006, 15:18
von Y0Gi
Habe jetzt im Python.de-Wiki einen Text zu Genshi verfasst.

Verfasst: Mittwoch 18. Oktober 2006, 15:41
von jens
Wo?

Verfasst: Mittwoch 18. Oktober 2006, 15:42
von Leonidas
Da wos hingehört, auf [wiki]Template Engines[/wiki].

Verfasst: Mittwoch 18. Oktober 2006, 15:48
von jens
OK, da war ich wohl etwas blind :oops: