Genshi, die neue beste Template-Engine?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

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
Zuletzt geändert von Y0Gi am Sonntag 10. Februar 2013, 00:49, insgesamt 3-mal geändert.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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).

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

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).
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

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.
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

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.
TUFKAB – the user formerly known as blackbird
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
7crystal7
User
Beiträge: 46
Registriert: Freitag 26. Mai 2006, 18:50

TAL ist doch toll, weiß gar nicht was ihr habt :D
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

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.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Habe jetzt im Python.de-Wiki einen Text zu Genshi verfasst.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Wo?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Da wos hingehört, auf [wiki]Template Engines[/wiki].
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

OK, da war ich wohl etwas blind :oops:

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten