Seite 1 von 1
with html
Verfasst: Mittwoch 30. April 2008, 10:18
von sma
Die Diskussion um `with` hat mich inspiriert. Es ist doch bestimmt schon mal jemand vorher auf diese Idee gekommen, oder?
Code: Alles auswählen
print h.h1("heading")
with h.table():
with h.div(c="foo"):
print h("Hallo ", h.b('Welt', id='x'))
print h.em(id='y', *('Geht', 'auch', h.b('so'), 'herum'))
(Implementierung kann ich auch bieten)
Stefan
Verfasst: Mittwoch 30. April 2008, 10:23
von Y0Gi
Genshi bietet sowas in Form des Builders, nur eben dass die Inhalte eines Elements nicht in `with`-Blücken, sondern als Funktionsargumente definiert werden.
Beispiel:
Code: Alles auswählen
doc = tag.html(
tag.body(
tag.h1(path),
tag.ul(
[itemize(dir) for dir in dirs],
[itemize(file) for file in files]))
)
Verfasst: Mittwoch 30. April 2008, 10:36
von BlackJack
@sma: Kam mal in comp.lang.python auf, wurde aber IIRC mehrheitlich als schlechte Lösung angesehen.
Verfasst: Mittwoch 30. April 2008, 10:37
von sma
Funktional hat den Nachteil, dass man keine bedingten Anweisungen wie gewohnt einfließen lassen kann. Auch Änderungen an Variablen werden schwer. Mit `print` und `with` lassen sich einfach alle weiteren Python-Anweisungen wie gewohnt kombinieren. Ob's wirklich schick ist, habe ich noch nicht entschieden.
Stefan
Re: with html
Verfasst: Mittwoch 30. April 2008, 11:36
von mitsuhiko
sma hat geschrieben:Die Diskussion um `with` hat mich inspiriert. Es ist doch bestimmt schon mal jemand vorher auf diese Idee gekommen, oder?
Alt

Richtig gut geht das aber nur in Ruby. With umschließt nur Statements, kann aber den "Code Block" nicht öfters ausführen.
Verfasst: Mittwoch 30. April 2008, 11:55
von phxx
Ansich ist die Idee ja schon witzig. Gibt es aber irgendwelche Gründe, das so zu machen anstatt eine Template-Engine zu verwenden?
Verfasst: Mittwoch 30. April 2008, 12:05
von EyDu
phxx hat geschrieben:Gibt es aber irgendwelche Gründe, das so zu machen anstatt eine Template-Engine zu verwenden?
Wenn du die absolute Verknüpfung zwischen Layout und Code haben willst, dann ist der Ansatz genau der richtige

Verfasst: Mittwoch 30. April 2008, 12:24
von Y0Gi
Ich weiß gar nicht mehr, warum ich in meinem Beispiel den Builder verwendet habe. Wahrscheinlich gab es gar kein Template, weil es nicht erforderlich war, und nur diese simple Struktur ausgegeben werden musste. Die, übrigens, nichts mit Präsentation oder Layout zu tun hat (dafür kommt CSS zum Einsatz), sondern nur eine zu exportierende Datenstruktur darstellt - ein XHTML-Dokument eben. Nur Daten.
Verfasst: Mittwoch 30. April 2008, 21:54
von sma
Ansich ist die Idee ja schon witzig. Gibt es aber irgendwelche Gründe, das so zu machen anstatt eine Template-Engine zu verwenden?
Ich finde, es ist ein Wert, keine neue Template-Sprache lernen zu müssen. Und man hat keine weiteren Abhängigkeiten im Code. Außerdem lässt sich das ganze in nur ca. 50 Zeilen implementieren und ist ein schönes Beispiel für die Möglichkeiten von Python.
Stefan
Verfasst: Donnerstag 1. Mai 2008, 22:19
von lunar
sma hat geschrieben:Ansich ist die Idee ja schon witzig. Gibt es aber irgendwelche Gründe, das so zu machen anstatt eine Template-Engine zu verwenden?
Ich finde, es ist ein Wert, keine neue Template-Sprache lernen zu müssen.
Und die Webdesigner wird es freuen, wenn sie Python zum Designen nutzen müssen
Und man hat keine weiteren Abhängigkeiten im Code.
Naja, man muss schon arg genügsam sein, um mit der Standardbibliothek aufzukommen. Bei jeder auch nur einigermaßen komplexen Aufgabe hat man eh externe Abhängigkeiten, eine mehr oder weniger macht da auch nichts aus

Verfasst: Donnerstag 1. Mai 2008, 23:02
von mitsuhiko
sma hat geschrieben:Ich finde, es ist ein Wert, keine neue Template-Sprache lernen zu müssen. Und man hat keine weiteren Abhängigkeiten im Code. Außerdem lässt sich das ganze in nur ca. 50 Zeilen implementieren und ist ein schönes Beispiel für die Möglichkeiten von Python.
Wenn du für das Erlernen von Mako/Jinja/Django mehr als 5 Minuten als Python Programmierer brauchst ist was kaputt.