我正在使用WTForms和Jinja2创建具有可编辑文本区域的页面。这个想法是在数据库中编辑文本,因此应该已经在文本区域中填充了文本供用户编辑。
基于this question / answer,我有类似
以下代码:
在app.py
中:
form = MyForm() # MyForm is defined elsewhere simply as
# class MyForm(FlaskForm): content=TextAreaField()
prepopulated = GetTextFromDatabase()
form.content.data = prepopulated
if form.validate_on_submit():
new_content = form.content.data
SaveToDatabase(new_content)
return flask.render_template('edit.html', form=form)
在edit.html
中:
<form method="POST">
<div>
{{ form.hidden_tag() }}
{{ form.content }}
</div>
<div>
<button type="submit">Submit</button>
</div>
</form>
但是,提交时,对文本所做的更改不会保存在数据库中。如果删除form.content.data = prepopulated
,则更改将保存。
那么我该如何预先填充文本区域,同时确保对文本所做的任何更改都已保存?
答案 0 :(得分:1)
您尚未共享MyForm
的代码,这对您有所帮助,因为您发布的链接中的可接受答案建议在表单创建步骤中使用default
参数。
之所以不起作用,是因为如果用户POSTS
到您的路线的表单比您做的所有都要覆盖数据,然后再使用以下代码验证表单:>
prepopulated = GetTextFromDatabase()
form.content.data = prepopulated
为什么不先尝试验证表单数据并执行数据库保存,如下所示:
if form.validate_on_submit():
new_content = form.content.data
SaveToDatabase(new_content)
else:
prepopulated = GetTextFromDatabase()
form.content.data = prepopulated
return flask.render_template('edit.html', form=form)