【问题标题】:How to pre-populate WTForm FileField with current image file name?如何使用当前图像文件名预填充 WTForm FileField?
【发布时间】:2021-08-10 17:02:44
【问题描述】:
当用户想要使用 WTForm 更新帖子时,如何在表单上预填充 FileField 输入,以便显示当前图像名称?
目前,用户每次更新帖子的其他方面时都必须上传相同的图像,否则当前图像将被删除,因为帖子正在更新而没有图像。
我目前如何预填充表单:
if request.method == 'GET':
form.title.data = post.title
form.language.data = post.language
form.alt.data = post.alt
form.text.data = post.content
form.tag_1.data = post.tag_1
form.tag_2.data = post.tag_2
form.tag_3.data = post.tag_3
form.image.data = post.img # This is the line where I am trying to pre-populate the FieldField
【问题讨论】:
标签:
flask
flask-wtforms
filefield
【解决方案1】:
目前,用户每次更新帖子的其他方面时都必须上传相同的图像,否则当前图像将被删除,因为帖子正在更新而没有图像。
我在做一个项目时遇到了同样的问题。虽然我没有解决预填充文件字段的问题,但我有一个解决方法。我做了以下。
-
当request.method为'GET'时,检查数据库中的image属性是否为NULL。如果不为空,则应将图像文件的位置传递给文件字段。在你的 routes.py 中使用你的变量,
form.image.process_data(path_to_image)
使用 Jinja2 if 条件在 HTML 表单的文件字段下显示图像缩略图,让用户知道图像已经存在。 (我使用的是 Bootstrap 卡)
{% if form.image.data%}
<div class="card" style="width: 12rem;">
<img src="{{form.image.data}}" class="card-img-top" alt="{{form.alt.data}}">
<div class="card-body">
<p class="card-text">{{form.alt.data}}</p>
</div>
</div>
-
在 POST 期间,检查 form.img 数据是否为 NULL。如果不为 NULL,则写入数据库。在你的 routes.py 中,它会是,
if form.image.data.filename:
post.img = form.image.data.filename