私は Pylons アプリを持っており、フォームを処理するために FormEncode と HtmlFill を使用しています。テンプレートにテキスト フィールドの配列があります (Mako)
<tr>
<td>ヤーデージ</td>
<td>${h.text('yardage[]', maxlength=3, size=3)}</td>
<td>${h.text('yardage[]', maxlength=3, size=3)}</td>
<td>${h.text('yardage[]', maxlength=3, size=3)}</td>
<td>${h.text('yardage[]', maxlength=3, size=3)}</td>
<td>${h.text('yardage[]', maxlength=3, size=3)}</td>
<td>${h.text('yardage[]', maxlength=3, size=3)}</td>
<td>${h.text('yardage[]', maxlength=3, size=3)}</td>
<td>${h.text('yardage[]', maxlength=3, size=3)}</td>
<td>${h.text('yardage[]', maxlength=3, size=3)}</td>
</tr>
ただし、これらのフィールドを検証する方法がわかりません。ここに私のスキーマからの関連エントリがあります
yardage = formencode.ForEach(formencode.validators.Int())
これらの各フィールドが Int であることを検証しようとしています。ただし、これらのフィールドの検証は行われません。
更新 ここで要求されているのは、このコントローラーのアクションのコードです。他のフォームフィールドを検証できるので、機能していたことはわかっています。
デフ提出(自己):
スキーマ = CourseForm()
試す:
c.form_result = schema.to_python(dict(request.params))
formencode.Invalid 以外、エラー:
c.form_result = error.value
c.form_errors = error.error_dict または {}
c.heading = 'コースを追加'
html = render('/派生/コース/add.html')
return htmlfill.render(
html、
デフォルト = c.form_result、
エラー = c.form_errors
)
そうしないと:
h.redirect_to(controler='course', action='view')
更新
IRC で、要素の名前をyardage[]からyardage
No result に変更するよう提案されました。それらはすべて int でなければなりませんが、要素の 1 つに f を入れても無効にはなりません。前に言ったように、他のフォーム フィールドを検証できます。以下は私のスキーマ全体です。
formencode のインポート
クラス CourseForm(formencode.Schema):
allow_extra_fields = True
filter_extra_fields = 真
name = formencode.validators.NotEmpty(messages={'empty': 'Name must not be empty'})
par = formencode.ForEach(formencode.validators.Int())
ヤード数 = formencode.ForEach(formencode.validators.Int())