Seite 1 von 2

Erzeugen von HTML-Formularen

Verfasst: Freitag 14. September 2007, 12:53
von midan23
Hallo zusammen,

ich muss des öfteren Textdokumente erzeugen ... da es dabei immer nach dem gleichen Schema abläuft (Vorlage kopieren und Kopie verändern) habe ich mir aus der Vorlage eine HTML-Datei gebaut:
- Eine Datei mit DIV in mehrere Abschnitte unterteilt
- Es wird immer nur ein Abschnitt angezeigt (Dank CSS-Eigenschaft "display")
- Zwischen den Abschnitten kann über ein Menü beliebig gewechselt werden
- Jeder Abschnitt enthält Eingabefelder für einen Teil der Vorlage
- Der letzte Abschnitt ist eine Zusammenfassung, die mit Copy & Paste in eine Textdatei wandert

Nicht zu vergessen, das einige der Felder optional sind und das bei Pflichtfeldern eine Eingabe erfolgen muss.

Mir vereinfacht das die Arbeit ...

Dummerweise sind einige Kollegen auch auf den Geschmack gekommen und ich muss damit rechnen, das noch andere Textvorlagen darauf warten, in ein HTML-Formular umgewandelt zu werden.
Aber alles von Hand schreiben ? Umständlich ... Und dauert zu lange ...

Daher meine Frage:

Gibt es Möglichkeiten, sich die ganze Prozedur zu vereinfachen ?

Verfasst: Freitag 14. September 2007, 13:42
von BlackJack
Falls ich die Frage richtig verstanden habe und falls sie lautet, ob man aus den Vorlagen automatisch das HTML dafür erstellen kann: Das kommt auf die Vorlagen an.

Wenn's nicht automatisch geht, kann man sicher die Vorlage mit Objekten beschreiben aus denen man dann HTML erzeugen kann. Irgendwo in das ganze passt vielleicht auch ein Template-System.

Falls sich eine Vorlage und die "Metadaten" übersichtlich in JSON beschreiben lassen, kann man vielleicht sogar die ganze Formularerzeugung in eine JavaScript-Anwendung verschieben.

Verfasst: Freitag 14. September 2007, 14:06
von midan23
BlackJack hat geschrieben:Falls ich die Frage richtig verstanden habe und falls sie lautet, ob man aus den Vorlagen automatisch das HTML dafür erstellen kann: Das kommt auf die Vorlagen an.
BlackJack hat geschrieben:Falls sich eine Vorlage und die "Metadaten" übersichtlich in JSON beschreiben lassen, kann man vielleicht sogar die ganze Formularerzeugung in eine JavaScript-Anwendung verschieben.
Die Idee klingt gut ... wenn es auch eher darauf hinauslaufen würde, das man die Vorlage erst nach JSON umschreiben müsste ...
BlackJack hat geschrieben:Wenn's nicht automatisch geht, kann man sicher die Vorlage mit Objekten beschreiben aus denen man dann HTML erzeugen kann. Irgendwo in das ganze passt vielleicht auch ein Template-System.
Objekte und Template-System würde mir aber fürs erste vollkommen reichen ...

Dann könnte man auch solche Sachen wie "nur Zahlen erlaubt", "nur aktiv/sichtbar, wenn Checkbox einen Hacken hat" und "Feldinhalt mit Zeichenkette verknüpfen und als Vorgabe in anderen Feldern verwendet" ...

Verfasst: Freitag 14. September 2007, 14:33
von Michael Schneider
Hallo Midan,

ich weiß um die Vorteile von HTML, aber trotzdem: wenn man schon ein Programm schreibt, um eine HTML-Vorlage zu erzeugen, warum dann nicht gleich in Python bleiben? Mit Tkinter Bordmitteln hast Du mindestens die Freiheit der HTML-Controls und kannst den Programmfluss, Lesen/Schreiben von Daten, etc. genau steuern.

Vielleicht bin ich als Python-Fan auch einfach nur voreingenommen. ;-)

Grüße,
Michael

Verfasst: Freitag 14. September 2007, 14:57
von midan23
Michael Schneider hat geschrieben:Hallo Midan,

ich weiß um die Vorteile von HTML, aber trotzdem: wenn man schon ein Programm schreibt, um eine HTML-Vorlage zu erzeugen, warum dann nicht gleich in Python bleiben? Mit Tkinter Bordmitteln hast Du mindestens die Freiheit der HTML-Controls und kannst den Programmfluss, Lesen/Schreiben von Daten, etc. genau steuern.

Vielleicht bin ich als Python-Fan auch einfach nur voreingenommen. ;-)

Grüße,
Michael
Diese Lösung würde mir auch am Besten gefallen ... das Problem bei der Sache ist nur, das die Rechner, bei denen diese Formulare am Meisten benötigt werden alles Testrechner sind. Und bei denen gilt eine einfache Regel: Installation zusätzlicher Software verboten
(Die Kisten werden im Durchschnitt ein mal die Woche neu installiert. Und das dazu verwendet Image ist vorgegeben ...)
Ich bin schon froh, wenn wir den Windows-eigenen Texteditor und den Internet Explorer zusätzlich verwenden dürfen ...

Verfasst: Sonntag 16. September 2007, 22:29
von midan23
Ich hab das Wochende mit Suchen verbracht und nichts brauchbares dabei gefunden ...

Entweder es fehlte was wichtiges oder die Template Engine war nicht wirklich für den Offline-Betrieb geeignet ...
(Kann natürlich auch sein, das ich was übersehen habe.)

Widgets wären nicht schlecht ... leider ist auch da nichts passendes dabei ...
Entweder sind es mehrere Dateien oder die HTML-Datei mit dem Formular würde grösser als 200KB werden ... ein wenig zu viel, wie ich finde ...

Sieht so aus, als müsste ich mir selber was schreiben:

Ausgehend von einem Template (oder auch mehrere) und einer Definitions-Datei, in der alle Abschnitte und Eingabefelder stehen, müsste daraus eine einzelne HTML-Datei generiert werden.
Überprüfung der Eingaben inklusive ...

Wird bestimmt lustig ...

Hat jemand konstruktive Ideen ?

Verfasst: Sonntag 16. September 2007, 22:38
von gerold
midan23 hat geschrieben:Hat jemand konstruktive Ideen ?
Hallo midan23!

Ich weiß es nicht. Aber vielleicht kannst du dir mit Cheetah etwas zusammenbasteln. Meine Erfahrung damit: http://gelb.bcom.at/trac/misc/wiki/Tuto ... it-cheetah

mfg
Gerold
:-)

Verfasst: Mittwoch 19. September 2007, 13:32
von midan23
Danke an alle, die bisher geholfen haben ...

@gerold:
Cheetah hab ich mir kurz angeschaut ... aber ich denke, das ich vorerst besser dran bin, wenn ich bei einem System bleibe, das ich bereits kenne (Kid)

Ein erstes "Entwurfs-Template" habe ich schon fertig (Sind auch nur über 200 Zeilen...).
Damit kann ich mein erstes Formular bereits komplett nachbauen ...

Jetzt sollte ich mir langsam Gedanken machen, wie die Eingabe aussehen sollte (sprich: die Anzahl und Namen der einzelnen Abschnitte; welche Eingabe-Elemente in welcher Reihenfolge in jedem Abschnitt enthalten ist ...)

Mir würde da eine Python-ähnliche Syntax vorschweben ...

Verfasst: Mittwoch 19. September 2007, 21:02
von mitsuhiko
midan23 hat geschrieben:Cheetah hab ich mir kurz angeschaut ... aber ich denke, das ich vorerst besser dran bin, wenn ich bei einem System bleibe, das ich bereits kenne (Kid)
Steig lieber auf Genshi um. Kid ist tot :)

Verfasst: Mittwoch 19. September 2007, 23:11
von midan23
Ob Kid tot ist oder nicht ist nicht so wichtig ...

Wichtig ist eher, das Genshi über Features verfügt, die ich bei Kid vermisse ...

Also wechsle ich zu Genshi ... und schon ist eine Frage da:

Mit Kid arbeite ich bisher so:

1) Editor: Template ändern
2) Kommandozeile: Mit einem selbst geschriebenen Script aus dem Template eine HTML-Datei machen
3) Browser: neues Template testen

Es gäbe zwar die Möglichkeit den zweiten Schritt mittels einfachen Webserver überflüssig zu machen ... aber leider gibt es dabei ein Problem:
Da die Templates bei Kid normale Python-Module sind, werden sie ohne Python-Neustart nicht neu geladen ...

Da Genshi aus den Templates keine Python-Module macht, gibt es dieses Problem nicht.

Aber: Wenn im Template Fehler enthalten sind, wo landen die Fehlermeldungen von Genshi ?
1) Im Browser -> Ich würde mir einen Schritt sparen
2) Im Kommandozeilen-Fenster -> Ich müsste auf die Webserver-Lösung verzichten

Verfasst: Mittwoch 19. September 2007, 23:21
von veers
midan23 hat geschrieben:2) Im Kommandozeilen-Fenster -> Ich müsste auf die Webserver-Lösung verzichten
Wieso?

Verfasst: Donnerstag 20. September 2007, 07:17
von midan23
veers hat geschrieben:
midan23 hat geschrieben:2) Im Kommandozeilen-Fenster -> Ich müsste auf die Webserver-Lösung verzichten
Wieso?
Wenn ich keine Fehlermeldung im Browser sehe, sondern im Kommandozeilen-Fenster, würde es so aussehen:
1) Editor: Template ändern
2) Browser: Template neu laden
3) Kommandozeilen-Fenster: nach Fehler schauen
4) Browser: Template testen

Es wäre umständlicher ...

Verfasst: Donnerstag 20. September 2007, 11:15
von midan23
Und noch mehr Fragen:

Warum werden Zeichenfolgen wie "ü" und " " nicht einfach übernommen, sondern durch komische Zeichen ersetzt?

Das Template ist eine UTF-8 codierte Unicode-Datei.
Als AUsgabe möchte ich ebenfalls eine UTF-8 codierte Unicode-Datei haben.
Wie mach ich das mit Genshi ?

(Unter uns: Mit Kid ging das einfach ...)

Verfasst: Donnerstag 20. September 2007, 11:24
von BlackJack
Was sind "komische" Zeichen? Kann es sein, dass es einfach UTF-8 für die entsprechenden Entities ist? Warum 'ü' und ' ' verwenden, wenn diese Zeichen in UTF-8 kodierbar sind?

Wahrscheinlich "überleben" die Entities gar nicht, weil sie beim Parsen durch die entsprechenden Zeichen ersetzt werden.

Edit:

Code: Alles auswählen

In [306]: genshi.HTML('ü').render()
Out[306]: '\xc3\xbc'

In [307]: print genshi.HTML('ü').render().decode('utf-8')
ü

Verfasst: Donnerstag 20. September 2007, 12:02
von midan23
Ich mal selber nachgeschaut ...

1) Laut meinem Editor ist die HTML-Datei eine UTF-8 codierte Unicode-Datei
2) Wenn ich es dem Browser sage, zeigt er mir auch alles korrekt an

Warum ich dem Browser erst sagen muss, das es eine UTF-8 codierung ist, kann ich mir auch denken ...
Ich vermute mal, ihm fehlt so etwas

Code: Alles auswählen

<meta http-equiv="content-type" content="text/html; charset=UTF-8">
Kid hat diese Zeile von selbst hinzugefügt, darum ist mir das bisher nicht aufgefallen ...
BlackJack hat geschrieben:Wahrscheinlich "überleben" die Entities gar nicht, weil sie beim Parsen durch die entsprechenden Zeichen ersetzt werden.
Kann man das vermeiden ? (Ich würde mein " " gerne behalten ...)

Verfasst: Donnerstag 20. September 2007, 13:00
von BlackJack
Keine Ahnung ob sich das vermeiden lässt. Das ersetzen würde ich von einem XML-Template schon erwarten weil es nach dem Parsen keine XML-Entities mehr gibt. Die werden beim Parsen ersetzt.

Verfasst: Donnerstag 20. September 2007, 13:18
von midan23
Ich würde eher erwarten, das sich das irgendwo einstellen lässt ...
Ich weiss zwar nicht genau, ob "&nbsp;" eine XML-Entiät ist, aber es ist auf jeden Fall eine HTML-Entität ...

Verfasst: Montag 1. Oktober 2007, 10:03
von midan23
Und auf zum nächsten Problem:

Wie bringe ich Genshi dazu, XML-Entitäten aus dieser JavaScript-Zeile

Code: Alles auswählen

var sec_stat = (e.length != 0) ? e[0].checked && status : status;
durch && zu ersetzen ?

&& kann ich ja nicht ins Template schreiben ...

Verfasst: Montag 1. Oktober 2007, 10:47
von Y0Gi
Das JavaScript sollte da überhaupt nicht drin sein, sondern in einer eigenen Datei - dann gibt es das Problem nicht.

Ich bin mir gerade nicht sicher, ob es eine Genshi-Funktion gibt, die Output ins Template einfügt, ohne diesen zu maskieren und stattdessen als gültiges XML anzunehmen. Alternativ könnte eine CDATA-Maskierung des JavaScript-Stücks helfen (die man ja mittlerweile ohnehin bei Inline-JavaScript anstatt nur HTML-Kommentaren zu verwenden scheint).

Verfasst: Montag 1. Oktober 2007, 11:55
von midan23
Dummerweise muss in der HTML-Datei, die am Schluss entstehen soll, auch ein Teil JavaScript rein ...

Aber da ich das Haupt-Template ohnehin in mehrere Dateien aufgeteilt habe, darunter auch eine für den JavaScript-Teil, gibt es eine Lösung:
  • JavaScript-Teil in ein Text-Template umwandeln
  • Dieses JavaScript-Template separat einlesen und behandeln
  • Das Ergebnis als Variable in das XHTML-Template einfügen
Theoretisch müsste es funktionieren ... es ist halt etwas Umständlich ...