Erzeugen von HTML-Formularen

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.
midan23
User
Beiträge: 147
Registriert: Sonntag 21. Mai 2006, 21:41
Wohnort: Müchen
Kontaktdaten:

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 ?
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.
midan23
User
Beiträge: 147
Registriert: Sonntag 21. Mai 2006, 21:41
Wohnort: Müchen
Kontaktdaten:

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" ...
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

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 Nachricht zersört sich in 5 Sekunden selbst ...
midan23
User
Beiträge: 147
Registriert: Sonntag 21. Mai 2006, 21:41
Wohnort: Müchen
Kontaktdaten:

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 ...
midan23
User
Beiträge: 147
Registriert: Sonntag 21. Mai 2006, 21:41
Wohnort: Müchen
Kontaktdaten:

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 ?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
midan23
User
Beiträge: 147
Registriert: Sonntag 21. Mai 2006, 21:41
Wohnort: Müchen
Kontaktdaten:

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

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 :)
TUFKAB – the user formerly known as blackbird
midan23
User
Beiträge: 147
Registriert: Sonntag 21. Mai 2006, 21:41
Wohnort: Müchen
Kontaktdaten:

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
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

midan23 hat geschrieben:2) Im Kommandozeilen-Fenster -> Ich müsste auf die Webserver-Lösung verzichten
Wieso?
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
midan23
User
Beiträge: 147
Registriert: Sonntag 21. Mai 2006, 21:41
Wohnort: Müchen
Kontaktdaten:

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 ...
midan23
User
Beiträge: 147
Registriert: Sonntag 21. Mai 2006, 21:41
Wohnort: Müchen
Kontaktdaten:

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 ...)
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')
ü
midan23
User
Beiträge: 147
Registriert: Sonntag 21. Mai 2006, 21:41
Wohnort: Müchen
Kontaktdaten:

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 ...)
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.
midan23
User
Beiträge: 147
Registriert: Sonntag 21. Mai 2006, 21:41
Wohnort: Müchen
Kontaktdaten:

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 ...
midan23
User
Beiträge: 147
Registriert: Sonntag 21. Mai 2006, 21:41
Wohnort: Müchen
Kontaktdaten:

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

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).
midan23
User
Beiträge: 147
Registriert: Sonntag 21. Mai 2006, 21:41
Wohnort: Müchen
Kontaktdaten:

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 ...
Antworten