Bottle Formulare

Django, Flask, Bottle, WSGI, CGI…
meego
User
Beiträge: 380
Registriert: Montag 4. März 2013, 14:36

noisefloor hat geschrieben:
* es kein Geheimnis ist, das DasIch aktiv bei Flask mit entwickelt
Ein schlechter Verkäufer. :mrgreen:
Benutzeravatar
noisefloor
User
Beiträge: 3853
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Das ist natürlich schade, wenn sich Bottle da nicht an die Standards hält. Meinst du die Simple Template Engine lässt gar keine CSS Argumente zu?
Welche Standards? Es gibt keinen Standard für Template Engines. Und das du `class_` verwenden solltest, steht _wörtlich_ in der Doku! "If one wants to pass the “class” argument which is a reserved keyword in some python-based templating languages, one can do: form.field(class_="text_blob")" (Link)

Aber BlackJack hat's ja schon gesagt: RTFM solltest du ernst nehmen.

Gruß, noisefloor
meego
User
Beiträge: 380
Registriert: Montag 4. März 2013, 14:36

Im Crashkurs bleibt dieser wichtige Umstand aber eben unerwähnt. Defacto-Standard.

Aber was wenn ein Label den Input umfasst, wie bei meiner Query-Iteration:

Code: Alles auswählen

<div class="btn-group" data-toggle="buttons">
		                % for housetype in housetypes[:3]:
		                    <label class="btn btn-primary btn-lg">
		                        <input type="radio" name="housetype" value="{{housetype.id}}"/>{{housetype.housetype_de}}
		                    </label>
		                % end
	              	</div>
Versagt dann das Konzept: {{!forms.x.label}} : {{!forms.x}}?
BlackJack

@meego: Nix Defacto-Standard, der Crash-Kurs verwendet Jinja-Templates und sagt das auch gleich an der ersten Stelle wo das erste Template steht im Rendering fields-Abschnitt. Die Erwartungshaltung das sich deshalb alle anderen Template-Engines genau so verhalten müssen wie Jinja ist unangebracht. Wenn Du eine andere Templating-Engine verwendest, musst Du halt schauen wie das dort gemacht wird. Und es gibt in Python *einige* Template-Engines. So ein Crash-Kurs hat also kaum eine Chance die alle abzudecken.

Edit: Den zweiten Teil Deiner Frage habe ich nicht ganz verstanden. Beziehungsweise wenn ich sie verstanden habe, dann verstehe ich nicht wie man das Fragen kann. Wenn etwas nicht dem Muster „Label, Doppelpunkt, Eingabe“ entspricht, dann kann man das selbstverständlich nicht nach dem Muster „Label, Doppelpunkt, Eingabe“ ausdrücken. Man könnte aber eventuell „Eingabe, Label” statt verschachteln benutzen und dann die Radiobuttons in ein `ListWidget` stecken und das die Buttons rendern lassen. Oder man schreibt sich ein eigenes Widget, welches die die gewünschte Form ausspuckt.
meego
User
Beiträge: 380
Registriert: Montag 4. März 2013, 14:36

Mako, Jinja, Django? Er soll sie nicht auch abdecken, aber auf den Template-unabhängigen Code hinweisen, tut die Doku ja auch.

Neben dem Darstellungsproblem: Beim Radio-Input verwende ich als Value die ID von der Abfrage. Damit WTforms dies validieren könnte, müsste WTF darauf auch irgendwie Zugriff bekommen.
BlackJack

@meego: Was meinst Du mit Template-unabhängigen Code? Wenn dort Beispiele für die Verwendung von WTForms in einem Template sind, dann müssen die Autoren ja irgendeine konkrete Template-Engine nehmen, und damit kann es nicht mehr unabhängig von einer konkreten Template-Engine sein.

Für die Radio-<input>s suchst Du eventuell `RadioField`?
Benutzeravatar
noisefloor
User
Beiträge: 3853
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Neben dem Darstellungsproblem: Beim Radio-Input verwende ich als Value die ID von der Abfrage. Damit WTforms dies validieren könnte, müsste WTF darauf auch irgendwie Zugriff bekommen.
Nee - da hast du das Konzept nicht verstanden! Du musst das schon in einer Klasse von WTForms definieren. WTForms kann nicht "irgendwas, was von außerhalb kommt", validieren.

BlackJack hat die ja schon den richtigen Hinweis gegeben: wtforms.fields.RadioField. Tipp 1: Unter wtforms.fields.SelectField ist erklärt, wie man die `choices` ins Formular bekommt. Tipp 2: wenn man die `choices` dynamisch ins Formular einfügen willst, dann erzeugt man sich in seinem View (bei dir: das "Hauptprogramm", wo auch die Routen an Funktionen gebunden sind) eine Instanz der Formklasse und füllt dann erst die `choices` Property mit Werten aus der Datenbank-Abfrage.

Und der Vollständigkeit halber sei noch erwähnt sei noch erwähnt, dass bei den gängigen Template-Engines Genshi fehlt ;-)

Gruß, noisefloor
BlackJack

@noisefloor: Ich werfe dann noch mal Cheetah-Templates in den Raum. :-) Und vielleicht noch ClearSilver weil Trac das benutzt.
Benutzeravatar
noisefloor
User
Beiträge: 3853
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@BlackJack: Trac ist auf Genshi umgestiegen (Link). Wobei ich dachte, die würden das so wie so einsetzen... Aber da lag ich wohl falsch... Egal, anderes Thema :-)
Antworten