ホームページ > バックエンド開発 > Python チュートリアル > [Python] WTForms を使用して可変長フォームを処理する

[Python] WTForms を使用して可変長フォームを処理する

大家讲道理
リリース: 2016-11-07 10:20:33
オリジナル
1879 人が閲覧しました

Zhihu で見られる質問: Python フラスコの wtforms は可変長フォームを処理できますか?

問題の説明

form中的元素会变多。
比如有一个表格:
我喜欢的东西: 可以增加任意个物品(这几个物品填在不同的框),然后提交。
实现这个需求,需要用到FieldList
ログイン後にコピー

簡単な例:

from wtforms import Form
from wtforms.fields import FieldList, StringField
class MyForm(Form):
    names = FieldList(StringField('名称'), label='物品列表', min_entries=1)
ログイン後にコピー

フォームデータを送信:

names-0=苹果
names-1=梨
names-2=香蕉
ログイン後にコピー

jsonデータを送信:

{"names": ["苹果", "梨", "香蕉"]}
ログイン後にコピー

出力結果の表示:

print(form.names.data)
# ['苹果', '梨', '香蕉']
ログイン後にコピー

以下はより複雑な例です:

from wtforms import Form
from wtforms.fields import FieldList, FormField, StringField, IntegerField
class ProductForm(Form):
    name = StringField('名称')
    count = IntegerField('数量')
class MyForm(Form):
    products = FieldList(FormField(ProductForm), label='产品列表', min_entries=1)
ログイン後にコピー

フォームデータを送信:

products-0-name=Iphone6
products-0-count=1
products-1-name=小米手机
products-1-count=2
ログイン後にコピー

json データを送信します:

{"products": [{"name": "Iphone6", "count": 1}, {"name": "小米手机", "count": 2}]}
ログイン後にコピー

出力結果は次のように表示されます:

print(form.products.data)
# [{'name': 'Iphone6', 'count': 1}, {'name': '小米手机', 'count': 2}]
ログイン後にコピー

そこで質問は、ダイナミクスの鍵は何でしょうか?


そうです、表示されているフィールド名の0から始まる番号です

項目を追加したい場合はどうすればよいですか?

最大の数プラス 1、それです!

HTML の js コードはダイナミクスを実現するための鍵です。ここでは、Python 部分のみに焦点を当てます。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート