with html

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Mittwoch 30. April 2008, 10:18

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

Mittwoch 30. April 2008, 10:23

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]))
    )
BlackJack

Mittwoch 30. April 2008, 10:36

@sma: Kam mal in comp.lang.python auf, wurde aber IIRC mehrheitlich als schlechte Lösung angesehen.
Zuletzt geändert von BlackJack am Mittwoch 30. April 2008, 10:37, insgesamt 1-mal geändert.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Mittwoch 30. April 2008, 10:37

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

Mittwoch 30. April 2008, 11:36

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.
TUFKAB – the user formerly known as blackbird
Benutzeravatar
phxx
User
Beiträge: 31
Registriert: Freitag 5. Mai 2006, 19:47

Mittwoch 30. April 2008, 11:55

Ansich ist die Idee ja schon witzig. Gibt es aber irgendwelche Gründe, das so zu machen anstatt eine Template-Engine zu verwenden?
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Mittwoch 30. April 2008, 12:05

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

Mittwoch 30. April 2008, 12:24

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.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Mittwoch 30. April 2008, 21:54

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
lunar

Donnerstag 1. Mai 2008, 22:19

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

Donnerstag 1. Mai 2008, 23:02

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.
TUFKAB – the user formerly known as blackbird
Antworten