【问题标题】: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】:

    目前,用户每次更新帖子的其他方面时都必须上传相同的图像,否则当前图像将被删除,因为帖子正在更新而没有图像。

    我在做一个项目时遇到了同样的问题。虽然我没有解决预填充文件字段的问题,但我有一个解决方法。我做了以下。

    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>
    
    1. 在 POST 期间,检查 form.img 数据是否为 ​​NULL。如果不为 NULL,则写入数据库。在你的 routes.py 中,它会是,

       if form.image.data.filename:
         post.img = form.image.data.filename
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-16
      • 1970-01-01
      • 2011-12-29
      • 2015-03-23
      相关资源
      最近更新 更多