私は 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())