如何为 WTForms 中的 StringField 提供默认值
How can I give a default value for the StringField in WTForms
我有这个class:
class New_video_form(FlaskForm):
title = StringField('title', validators=[DataRequired()])
genre = StringField('genre', validators=[DataRequired()])
link = StringField('link', validators=[DataRequired()])
image = StringField('Image', validators=[DataRequired()])
description = StringField('description', validators=[DataRequired()])
我在这里实现了这个:
<h1 style="color: white; text-align: center; margin-top: 20px;">Editing the movie: {{ video.title }}</h1>
<form action="" method="POST" style="display: flex; flex-direction: column; align-items: center; justify-content: center; margin-top: 50px;">
{{ form.csrf_token }}
<div class="form-group">
{{ form.title(class="form-control", value="{{ video.title}}", placeholder="Title") }}
</div>
<div class="form-group">
{{ form.genre(class="form-control", value="{{ video.genre }}", placeholder="Genre") }}
</div>
<div class="form-group">
{{ form.link(class="form-control", value="{{ video.link }}", placeholder="Video Link") }}
</div>
<div class="form-group">
{{ form.image(class="form-control", value="{{ video.image}}", placeholder="Image") }}
</div>
<div class="form-group">
{{ form.description(class="form-control", value="{{ video.description }}", placeholder="Description") }}
</div>
<button type="submit" class="btn btn-light btn-lg">Send</button>
</form>
并且此表格是从这条路线发送的:
@controller.route('/edit/<int:id>/', methods=['GET','POST'])
def edit(id):
if current_user.is_authenticated:
form = New_video_form()
video = Video.query.filter_by(id=id).first()
if request.method == "POST":
video.title = form.title.data
video.link = form.link.data
video.image = form.image.data
video.genre = form.genre.data
video.description = form.description.data
db.session.commit()
#add a flash message
return redirect(url_for('index'))
else:
return render_template('edit.html',form=form, video=video)
else:
return redirect(url_for('controller.admin'))
我在这里发送表单和将在表单中使用的数据作为视频,但是当我将数据放入值字段时,表单呈现 {{ video.example }} 而不是值。
我如何为 stringfield 从 {{ video.example }} 获取值并呈现该值?
ps:h1 呈现正确的值。
如果我没理解错的话,如果用户来编辑视频,你想显示预填的表格吗?
您可以使用 this API 并在初始化时将视频对象传递给表单,如下所示:
video = Video.query.filter_by(id=id).first()
form = New_video_form(obj=video)
如果这样做,则不需要为每个字段显式传递 value="{{video.title}}"
等等。
快速编辑:刚刚注意到您在 db.session.commit()
之前还缺少 db.session.add(video)
— 除非您将更新的对象添加到会话中,否则不会提交更改。
我有这个class:
class New_video_form(FlaskForm):
title = StringField('title', validators=[DataRequired()])
genre = StringField('genre', validators=[DataRequired()])
link = StringField('link', validators=[DataRequired()])
image = StringField('Image', validators=[DataRequired()])
description = StringField('description', validators=[DataRequired()])
我在这里实现了这个:
<h1 style="color: white; text-align: center; margin-top: 20px;">Editing the movie: {{ video.title }}</h1>
<form action="" method="POST" style="display: flex; flex-direction: column; align-items: center; justify-content: center; margin-top: 50px;">
{{ form.csrf_token }}
<div class="form-group">
{{ form.title(class="form-control", value="{{ video.title}}", placeholder="Title") }}
</div>
<div class="form-group">
{{ form.genre(class="form-control", value="{{ video.genre }}", placeholder="Genre") }}
</div>
<div class="form-group">
{{ form.link(class="form-control", value="{{ video.link }}", placeholder="Video Link") }}
</div>
<div class="form-group">
{{ form.image(class="form-control", value="{{ video.image}}", placeholder="Image") }}
</div>
<div class="form-group">
{{ form.description(class="form-control", value="{{ video.description }}", placeholder="Description") }}
</div>
<button type="submit" class="btn btn-light btn-lg">Send</button>
</form>
并且此表格是从这条路线发送的:
@controller.route('/edit/<int:id>/', methods=['GET','POST'])
def edit(id):
if current_user.is_authenticated:
form = New_video_form()
video = Video.query.filter_by(id=id).first()
if request.method == "POST":
video.title = form.title.data
video.link = form.link.data
video.image = form.image.data
video.genre = form.genre.data
video.description = form.description.data
db.session.commit()
#add a flash message
return redirect(url_for('index'))
else:
return render_template('edit.html',form=form, video=video)
else:
return redirect(url_for('controller.admin'))
我在这里发送表单和将在表单中使用的数据作为视频,但是当我将数据放入值字段时,表单呈现 {{ video.example }} 而不是值。 我如何为 stringfield 从 {{ video.example }} 获取值并呈现该值?
ps:h1 呈现正确的值。
如果我没理解错的话,如果用户来编辑视频,你想显示预填的表格吗?
您可以使用 this API 并在初始化时将视频对象传递给表单,如下所示:
video = Video.query.filter_by(id=id).first()
form = New_video_form(obj=video)
如果这样做,则不需要为每个字段显式传递 value="{{video.title}}"
等等。
快速编辑:刚刚注意到您在 db.session.commit()
之前还缺少 db.session.add(video)
— 除非您将更新的对象添加到会话中,否则不会提交更改。