BlackJack hat geschrieben:Was genau beanstandest Du denn an der zitierten Codezeile? Wie sollte das denn getrennter aussehen? Irgendwo *muss* man letztendlich eine Schnittstelle zu Funktionen/Methoden anbieten.
Hi @ all!
Ich gehe mit meiner Meinung zu diesem Thema ziemlich mit den Entwicklern von TAL konform. Bei TAL gibt es nur eine Stelle, an der Code sein darf --> als Attribut eines TAGs. So gibt es für den, der die Seite später einmal umgestalten muss, nicht so viel zu bedenken.
Er muss natürlich ein paar Dinge über Tal wissen. Zum Beispiel:
- Wenn im TAG "tal:replace" steht, dann wird der komplette TAG ersetzt. Es bringt also nichts, wenn er eine Änderung als TAG-Content hinein schreibt.
- Wenn im TAG "tal:content" steht, dann wird der Inhalt des TAGs ersetzt. Die TAG-Definition selbst, bleibt erhalten.
Der, der die Seite später mal editiert, muss also nur ein paar Grundregeln beachten um die Seite nicht zu zerstören.
Es kann komplizierter werden, wenn auch noch innerhalb eines TAGs Code stehen kann. Ich kann diese Aussage nicht beweisen, da es sich dabei um eine Bauchsache handelt.
Man kann sich ja mal den Quellcode von vielen ASP- oder PHP-Seiten ansehen, die so im Internet herumschwirren, oder die man selber programmiert hat. Viele sind kaum mehr wartbar, da es kaum oder keine Trennung zwischen Code und Content gibt.
Man kann es auch so sehen: Je schwieriger es dem Programmierer gemacht wird, unschönen Code zu schreiben, desto einfacher ist es für andere, den Code zu lesen. --> Python.
Es gab eine Zeit, das ist noch gar nicht so lange her, da erstellte ich dynamische Internetseiten in Zope mit DTML. DTML ist sehr mächtig und man kann damit auch innerhalb eines Textes Variablen einfügen.
Aber genau diese Möglichkeit, macht dir auf einmal Schwierigkeiten, wenn du innerhalb eines TAGs ein Attribut verändern, hinzufügen oder löschen möchtest. Auch ein WYSIWYG-Editor hat keine Chance mehr, da der Code das TAG so verändert, dass es nicht mehr HTML-konform ist.
Genau über solche Dinge und noch viel mehr, haben sich die Entwickler von TAL, METAL und Co. Gedanken gemacht. Das Ergebnis ist nicht nur eine Vorlagensprache, sondern eine komplette Strategie zur Website-Erstellung.
Wenn ich schon innerhalb eines TAGs einen Teil ersetzen muss, dann sollte dieser Teil auch ungerendert wie gültiges HTML aussehen. Ungeachtet der Möglichkeit, den Text übersetzten zu lassen, könnte der Code in TAL so aussehen:
Code: Alles auswählen
<p>
The current time is
<span tal:content="python: time.strftime('%C %c')">[Time]</span>.
</p>
Ich habe diesen Code, nur mal zum Testen, in den Quellcodebereich des Programmes
NVU eingegeben. Danach in die WYSIWYG-Ansicht gewechselt, "[Time]" markiert und auf den Button für "Fett" geklickt. Das Ergebnis aus dem Quellcodebereich sieht so aus:
Code: Alles auswählen
<p>The current time is <span style="font-weight: bold;"
tal:content="python: time.strftime('%C %c')">[Time]</span>.
</p>
Auch wenn ich jetzt in der Normalansicht von NVU den Text "[Time]" in "[Zeit]" geändert hätte -- der Code würde weiterhin funktionieren.
Einzig das Löschen des kompletten Textes "[Time]" hätte dazu geführt, dass der Code gelöscht worden wäre.
Als ich mich das erste Mal mit Zope beschäftigte, schrie ich sofort nach einem Ersatz für ASP, also der Möglichkeit Code direkt in die HTML-Seite einzugeben. Das ist heute nicht mehr der Fall. Heute bin ich froh, dass ich so viel von der Logik in Python-Skripte ausgelagert habe. Diese kann ich jetzt, ohne Mehraufwand, direkt in anderen Vorlagen
wiederverwenden und über
XML-RPC oder
HTTP aufrufen.
Man stelle sich nur die Möglichkeiten vor, die einem genommen werden, nur weil man Code nicht vom Content trennen wollte.....
Stell dir vor, du erstellst eine HTML-Seite, die dir den Status deiner Server anzeigt. Steckt die Logik nicht in der HTML-Seite, sondern in einem Python-Skript, das von der HTML-Seite aufgerufen wird, dann ist es schon fast ein Kinderspiel, diese Daten von einem Programm auf einem Client-PC per XML-RPC abzurufen und in einem GUI anzuzeigen.
Würde die Logik in der HTML-Seite stecken, dann müsste man entweder die gerenderte HTML-Seite parsen oder dafür nochmal ein eigenes Skript schreiben.
lg
Gerold
