Flask WTForms FieldList with BooleanField

przemekk

I'd like to generate list of files with checkboxes. I've tried to use FieldList but it doesn't work as I expected. Instead of checkbox with assigned filename I'm getting checkbox with label named after the variable containing FieldList object. Is there any way to fix it?

app.py:

from flask import Flask, render_template
from flask_bootstrap import Bootstrap
from flask_wtf import FlaskForm
from wtforms import BooleanField, FieldList, SubmitField

app = Flask(__name__)
app.config['SECRET_KEY'] = 'development'
Bootstrap(app)

filenames = ['1.jpg', '2.jpg', '3.jpg', '4.jpg']


class FileListForm(FlaskForm):
    filename = FieldList(BooleanField(), 'Files')
    submit = SubmitField('Submit')


@app.route('/')
def listfiles():
    form = FileListForm()
    for filename in filenames:
        form.filename.append_entry(filename)
    return render_template('index.html',
                           form=form)


if __name__ == '__main__':
    app.run(debug=True, port=5001)

templates/index.html

{% import "bootstrap/wtf.html" as wtf %}
{{ wtf.quick_form(form) }}

packages:

click==6.7
dominate==2.3.1
Flask==0.12.2
Flask-Bootstrap==3.3.7.1
Flask-WTF==0.14.2
itsdangerous==0.24
Jinja2==2.9.6
MarkupSafe==1.0
visitor==0.1.3
Werkzeug==0.12.2
WTForms==2.1
Jacob Budin

According to the documentation, WTForms' FieldList shouldn't be used with BooleanField:

Note: Due to a limitation in how HTML sends values, FieldList cannot enclose BooleanField or SubmitField instances.

(Even though the HTML output appears valid.) That said, you're not seeing what you're expecting to see because append_entry's first parameter accepts the form input's value, not its label.

Instead, I'd recommend creating the form class dynamically:

filenames = ['1.jpg', '2.jpg', '3.jpg', '4.jpg']

class FileListFormBase(FlaskForm):
    submit = SubmitField('Submit')

def file_list_form_builder(filenames):
    class FileListForm(FileListFormBase):
        pass

    for (i, filename) in enumerate(filenames):
        setattr(FileListForm, 'filename_%d' % i, BooleanField(label=filename))

    return FileListForm()

@app.route('/')
def listfiles():
    form = file_list_form_builder(filenames)
    return render_template('index.html', form=form)

Note: The default HTML representation will have the "Submit" button at the top, since the library renders fields in the order they're defined. WTForms doesn't natively support ordering, so this may be a better solution for you even though it's less elegant:

filenames = ['1.jpg', '2.jpg', '3.jpg', '4.jpg']

def file_list_form_builder(filenames):
    class FileListForm(FlaskForm):
        pass

    for (i, filename) in enumerate(filenames):
        setattr(FileListForm, 'filename_%d' % i, BooleanField(label=filename))

    setattr(FileListForm, 'submit', SubmitField('Submit'))
    return FileListForm()

@app.route('/')
def listfiles():
    form = file_list_form_builder(filenames)
    return render_template('index.html', form=form)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

BooleanFieldを使用したFlaskWTForms FieldList

分類Dev

FormFieldのWTForms FieldListを使用する方法

分類Dev

Flask wtformsネストされた変数

分類Dev

Flask WTForms:DataRequiredとInputRequiredの違い

分類Dev

FlaskのWTFormsでDecimalRangeFieldを検証する

分類Dev

wtforms TextField/SearchField with autocompletion for flask app (similar to a google search bar)

分類Dev

Flask WTForms - Custom validators based of multiple form fields

分類Dev

Possible to build a flask "WTForms class" conditionally based on language cookie content

分類Dev

'Fieldlist' / 'FormField'がflask_wtfで正しくレンダリングされない

分類Dev

ユーザーインターフェイスから新しいWTForms FieldListエントリを動的に追加する

分類Dev

validate_on_submit()ブロックの後にWTForms FieldListを設定するにはどうすればよいですか?

分類Dev

Flask-WTForms CSRF保護をAJAXで使用する方法?

分類Dev

wtforms + flask今日の日付をデフォルト値として

分類Dev

Flask, wtforms는 빈 양식을 다시 게시합니다.

分類Dev

Flask-WTFormsと非表示フィールド

分類Dev

Python Flask WTForms:「無効な選択」を返す動的SelectField

分類Dev

AJAXが入力されたFlaskForm(Flask-WTForms)SelectFieldの検証

分類Dev

Flask WTFormsはvalidate_on_submit()で常にfalseを返します

分類Dev

Flask-WTForms: name 属性と id 属性を動的に作成

分類Dev

Flask WTForms:フィールド値が送信されない

分類Dev

Flaskのカスタマイズ-WTFまたはWTForms

分類Dev

Flask-WTFormsのrender_kwでFlask-Babelgettextを使用する方法は?

分類Dev

Flaskを使用したWTFormsのカスタムバリデーター

分類Dev

Flask WTForms:少なくとも1つのフィールドの検証InputRequired

分類Dev

編集フォームにWTFormsとFlaskを事前入力します

分類Dev

Flask、wtformsは空のフォームをポストバックします

分類Dev

When submitting a Flask WTForms, how can fields be left blank without blanking-out those values from the database table?

分類Dev

Flask、MongoEngine、WTForms-フォームレンダリングのエラー

分類Dev

Flask、WTForms:StringFieldを_一時的に_非表示にする方法はありますか?

Related 関連記事

  1. 1

    BooleanFieldを使用したFlaskWTForms FieldList

  2. 2

    FormFieldのWTForms FieldListを使用する方法

  3. 3

    Flask wtformsネストされた変数

  4. 4

    Flask WTForms:DataRequiredとInputRequiredの違い

  5. 5

    FlaskのWTFormsでDecimalRangeFieldを検証する

  6. 6

    wtforms TextField/SearchField with autocompletion for flask app (similar to a google search bar)

  7. 7

    Flask WTForms - Custom validators based of multiple form fields

  8. 8

    Possible to build a flask "WTForms class" conditionally based on language cookie content

  9. 9

    'Fieldlist' / 'FormField'がflask_wtfで正しくレンダリングされない

  10. 10

    ユーザーインターフェイスから新しいWTForms FieldListエントリを動的に追加する

  11. 11

    validate_on_submit()ブロックの後にWTForms FieldListを設定するにはどうすればよいですか?

  12. 12

    Flask-WTForms CSRF保護をAJAXで使用する方法?

  13. 13

    wtforms + flask今日の日付をデフォルト値として

  14. 14

    Flask, wtforms는 빈 양식을 다시 게시합니다.

  15. 15

    Flask-WTFormsと非表示フィールド

  16. 16

    Python Flask WTForms:「無効な選択」を返す動的SelectField

  17. 17

    AJAXが入力されたFlaskForm(Flask-WTForms)SelectFieldの検証

  18. 18

    Flask WTFormsはvalidate_on_submit()で常にfalseを返します

  19. 19

    Flask-WTForms: name 属性と id 属性を動的に作成

  20. 20

    Flask WTForms:フィールド値が送信されない

  21. 21

    Flaskのカスタマイズ-WTFまたはWTForms

  22. 22

    Flask-WTFormsのrender_kwでFlask-Babelgettextを使用する方法は?

  23. 23

    Flaskを使用したWTFormsのカスタムバリデーター

  24. 24

    Flask WTForms:少なくとも1つのフィールドの検証InputRequired

  25. 25

    編集フォームにWTFormsとFlaskを事前入力します

  26. 26

    Flask、wtformsは空のフォームをポストバックします

  27. 27

    When submitting a Flask WTForms, how can fields be left blank without blanking-out those values from the database table?

  28. 28

    Flask、MongoEngine、WTForms-フォームレンダリングのエラー

  29. 29

    Flask、WTForms:StringFieldを_一時的に_非表示にする方法はありますか?

ホットタグ

アーカイブ