Ziel: Ich versuche, WTForm dazu zu bringen, eine doppelte Aufgabe zu erfüllen, indem ich einen Feldplatzhalter verwende, um Informationen aus einer Datenbank darzustellen und es dem Benutzer dann zu ermöglichen, diese zu ändern, indem er neue Informationen eingibt und auf „Senden“ klickt. (Wenn dies eine schlechte Idee oder kein gültiger WTForm-Anwendungsfall ist, lassen Sie es mich wissen!)
Backend-Technologie: Python (3.12.x), Flask (3.1.x) und WTForms (3.2.x)
Frontend: HTML, CSS, Vanilla JS
Frage 1: Bedeutet das, dass ich für jeden Mitarbeiter eine neue Flask-Formularklasse erstellen muss? Karte (Klassendefinition siehe unten), wie EmployeeCardForm1, EmployeeCardForm2... usw., obwohl der einzige Unterschied der Wert für das Platzhalterattribut für HTML ist? Für 30 Mitarbeiter habe ich also 30 Mitarbeiterkartenklassen. (Scheint, als gäbe es einen besseren Weg)
Frage2: Wie kann der Platzhalterwert für den Parameter render_kw dynamisch festgelegt werden? Zumindest kann ich aus den WTForms-Dokumenten keinen direkten Weg erkennen. Gibt es eine Möglichkeit, dies während der Instanziierung der Formularklasse bereitzustellen? Ich bin mir nicht sicher.
Mit dynamisch meine ich, dass der Code durch Lesen aus einer Datenbank zur Laufzeit herausfindet, welchen Wert für render_kw festgelegt werden soll.
Code: Select all
class EmployeeCardForm(Form):
first_name = StringField(label="First Name",
validators=[
Length(min=1, max=100),
Regexp(regex="^[a-zA-Z]+$",
flags=re.IGNORECASE),
],
render_kw={"placeholder": })
last_name = StringField(label="Last Name",
validators=[
Length(min=1, max=100),
Regexp(regex="^[a-zA-Z]+$",
flags=re.IGNORECASE),
],
render_kw={"placeholder": })
Code: Select all
@app.route("/", methods=['GET', 'POST'])
def index():
form = EmployeeCardForm(request.form)
return render_template("index.html", form=form)
Mobile version