Gibt es gute Python-Bibliotheken, die eine elegante Lösung für die sogenannte "Vorlagenanimation", "unauffälliges Server-Scripting" oder "binding data to markup" bieten?
Mit anderen Worten, ich bin auf der Suche nach einer guten API, um Daten an einfaches HTML zu binden, um eine dynamische Webseite zu erstellen.
Bonuspunkte, wenn es die API-Aufrufe und HTML in HTML-emagierenden Code kompiliert, da es HTML langsam analysiert, manipuliert und dann wieder in HTML serialisiert.
Diese Frage wird von der " Ihr Templating-Engine ist zumutbar und alles, was Sie jemals geschrieben haben, ist Spaghetti-Code (ja, Sie) "Blogpost, der Template-Animation von reinem HTML befürwortet, um das Mischen von Sprachen zu vermeiden, die Vorlagensystemen innewohnen.
Anstatt Datenbindung und Markup in einer einzigen Vorlage (view.tmpl) zu mischen, trennen Sie die Datenbindung von der eigenen Codedatei (view.py), sodass nur HTML in der Vorlage (view.html) verbleibt.
Der eindeutige Vorteil der Aufteilung besteht darin, dass Designer Ansichten unabhängig von den Entwicklern und der Back-End-Implementierung in HTML schreiben können. Der Designer kann dann die Ansicht HTML in seinem gewählten Toolset iterativ verbessern. Designer sind im Allgemeinen nicht bereit, in einer Vorlagensprache zu hacken und eine vollständige Entwicklungsumgebung und einen Web-Server auszuführen, um die Änderungen zu visualisieren.
Langsame Leistung . Analysieren Sie HTML, manipulieren Sie die Struktur, um Daten zu binden, und serialisieren Sie sie dann wieder in HTML, was 3x langsamer ist als die Verarbeitung einer kompilierten Vorlage. Vorlagensprachen sind wirklich syntaktische Zucker für Code, der HTML druckt. Die hquery-Ruby-Bibliothek löst das, indem sie den hquery-Code und HTML in die traditionelle Vorlage einfügt. Große Demonstration der Leistungsfähigkeit von Ruby-basierten DSLs. Kann es in Python gemacht werden?
Begrenzt auf HTML und XML . Template-Animation beruht auf der Struktur von HTML, im Gegensatz zu vielen Templating-Sprachen, die sich nicht um das Markup kümmern, und wird genauso gut reinen Text oder CSS generieren, wie sie HTML darstellen. Ich denke nicht, dass dies ein Problem für Web-Apps ist, und einige Template-Sprachen wie Genshi sind stolz darauf, innerhalb der Struktur von gültigem XML zu arbeiten.
Zu komplex . Die Manipulation von HTML mit DOM ist geradezu schmerzhaft. Hoffentlich macht die richtige API das Bearbeiten von HTML im Code genauso einfach wie das Hinzufügen von Vorlagenanweisungen zum HTML.
hquery für Ruby, das als "unaufdringliches Server-Scripting" beschrieben wird, ist ein DSL, das HTML aus Datenstrukturen füllt. Diese HTML-Manipulationen werden zur schnellen Ausführung in eine ERB-Vorlage kompiliert.
queryTemplates für PHP, beschrieben als "DOM- und CSS-gesteuertes Template" mit "Dateninjektionsmethoden" . API verwendet jQuery-inspirierte Anrufverkettung. Der Code beschreibt, wie eine PHP-Datenstruktur an den HTML-Code gebunden wird, und kompiliert das Ergebnis in eine .php-Vorlage, um die konkrete Datenstruktur zu akzeptieren
reine JavaScript-Bibliothek zum Binden von JSON an HTML. Benötigt zusätzliche "Direktive" JSON, die beschreibt, wie die JSON-Daten mit HTML-Elementen in Beziehung gesetzt werden.
diazo für Python. Erfordert eine rules.xml, die zusammen mit dem einfachen HTML-Design des Designers zu einem XSLT- "Template" kompiliert wird, das dynamisches HTML oder XML von der Webanwendung an das Design bindet.
queryTemplates, pure und diazo erfordern eine abstrakte Beschreibung, wie Daten an HTML gebunden werden können - in Form von verketteten API-Aufrufen, JSON- bzw. XML-Regeln. Das System erstellt dann eine Vorlage, um konkrete Daten für die Bindung zu akzeptieren. Die abstrakte Datenbindungsbeschreibung fügt eine indirekte Ebene hinzu, die vermutlich mehr mentale Gymnastik erfordert als das Hinzufügen von Schablonendirektiven zu HTML.
hquery unterscheidet sich jedoch dadurch, dass seine API-Aufrufe Datensuchausdrücke akzeptieren, die irgendwie unbewertet bleiben und im kompilierten ERB erhalten bleiben. Es ist ein lispartiger "Code als Daten" -Modus, der zumindest sehr cool ist und wahrscheinlich einfacher zu schreiben ist.
PyMeld für Python, ein DOM-ähnliches, das auf String-Ersetzung basiert. Ich habe es versucht und es mühsam gefunden. Das Füllen einer Tabelle beinhaltet das Ausschneiden der Probenreihe aus der Tabelle, dann das wiederholte Auffüllen der Reihe mit den Aufzeichnungsdaten und das Anhängen einer Kopie an die Tabelle. Ugh.
Platten für Node.js "bindet Daten an Markup" (nämlich JSON an HTML). Es ist wie Moustache ohne eine Moustache-Vorlagensyntax. Ich erwarte, dass das direkte Ausfüllen von HTML aus JSON die sehr einfache Datenbindung einschränkt. Ich habe nicht einmal ein Beispiel für eine Schleife gesehen.
HTML :: Zoom für Pearl. Es ist jQuery für Perl. Kompiliert nicht.
lxml.etree die de facto Python XML / HTML-Bibliothek. Vielleicht halb so schmerzhaft wie DOM. Wurde für das Parsen / Generieren von XML geschrieben, nicht für Datenbindung an vorhandenes HTML. Aber es ist eine gute Grundlage, um eine Vorlagen-Animationsbibliothek zu erstellen.
pyquery wurde oben auf lxml.etree und lxml.cssquery erstellt. Emuliert die jQuery-API-Methode nach Methode. Dies macht es für die HTML-Manipulation überlegen, aber es fehlen Komfortfunktionen zum Binden von Datenstrukturen an das HTML. Diese können hinzugefügt werden, nur Zurückziehen wäre Langsamkeit, weil es inhärent ein parse-manipulate-serialise-Prozess ist.
golem von brandizzi, das auf lxml.etree und lxml.cssquery aufbaut. Es fängt gerade erst an, aber eine prozedurale API speziell für die Datenbindung.
Selbst mit einer guten API zum Binden von Daten an HTML wird es langsam, es sei denn, es kann in HTML-emagierenden Code oder zumindest in eine traditionelle Template-Sprache kompiliert werden.
Die Einbeziehung von gemeinsamen Fußzeilen oder die Navigation und die Handhabung von Layout-Mastern (auch Template-Vererbung genannt) ist ein ähnliches Problem. Der einfache HTML-Code muss vollständig und erweitert sein, damit er als Vorschau verwendet werden kann. Diese Erweiterungen müssen also vor dem Datenbindungsschritt ausgeführt werden. Es gibt Tools, um gängige Includes und Layouts zu verwalten - Dreamweaver for one hat ein Bibliothekssystem für gemeinsame Fußzeilen und ähnliches.
Tags und Links python template-engine