Sie betrachten könnte eine separate Aktion für das Formular und laden das gesamte Formular in die Seite über eine Ajax-Komponente zu erstellen:
def index():
form_component = LOAD('default', 'form.load', ajax=True)
return dict(form_component=form_component)
def form():
form = FORM(...).process()
return dict(form=form)
In der index.html Ansicht, Sie dann die Komponente über {{=form_component}}
umfassen würde, und in der form.load-Ansicht würden Sie das Formular selbst über {{=form}}
einschließen (beachten Sie, dass die form.load-Ansicht das Layout nicht erweitern sollte, da es letztendlich in die index.html-Seite über Ajax eingefügt wird).
Jetzt wird das gesamte Formular über Ajax geladen, und es wird automatisch über Ajax gesendet, mit einem neuen Formular auch über Ajax zurückgegeben (so müssen Sie überhaupt keinen Javascript-Code schreiben).
Alternativ können Sie, wenn Sie bei Ihrem aktuellen Ansatz bleiben möchten, den Controller das gesamte Formular als Antwort auf die Ajax-Anforderung zurückgeben und das Zielargument der ajax()
-Funktion auf die ID des div, das das enthält, festlegen bilden. In diesem Fall wird nach Abschluss der Ajax-Anfrage das gesamte Formular durch ein neues Formular ersetzt (das einen neuen _Formschlüssel haben wird).
Danke! Ich habe nach dem "web2py style" gesucht, um das zu erreichen. Es funktionierte mit einer Komponente! – cdonts