竜@コンプネットです

turgogears.widgets.TableForm の使い方がどうもよく分かりません

TableFormを使ったフォームのバリデートに @validator, @error_handler を使うと、
バリデートエラー時に表示されるフォームの action や name などのアトリビュートが
無効になります

例えば以下のようなコードを考えます

from turbogears.widgets import widgets, validators
from turbogears import controllers, expose, validate, error_handler, url

class FieldList(widgets.WidgetsList):
    id = widgets.HiddenField('id', validator=validators.Int())
    message = widgets.TextField('message, label=_('message'),
attrs=dict(size=64),

validator=validators.UnicodeString(not_empty=True, max=64))

table = widgets.TableForm(name='table_form',
                          fildes=FieldList(),
                          action=url('/update')
                          submit_test=_('Update')

class Root(controllers.RootController):
    @expose()
    def edit(self, *args, **kwds):
        return dict(template='''
                             <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML
1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
                             <html
xmlns="http://www.w3.org/1999/xhtml";
xmlns:py="http://purl.org/kid/ns#";>

                             <head>
                                 <meta content="text/html;
charset=UTF-8" http-equiv="content-type"/>
                                 <title py:content="_('Sample)"/>
                             </head>
                             <body>
                                 <div py:content="form.display()"/>
                             </body>
                             </html>
                             ''',
                    form=table)

    @expose()
    @error_handler(edit)
    @validate(form=table)
    def update(self, *args, **kwds):
        pass

9行目から12行目で、TableFormのインスタンスを作成しています
 9> table = widgets.TableForm(name='form',
10>                           fildes=FieldList(),
11>                           action=url('/update')
12>                           submit_test=_('Update')

このインスタンスを最初に表示したときは、formタグは <form action="/update" method="post"
class="tableform" name="table_form"> と予想通りの結果が得られます
ここでわざとエラーになるような入力をして、submitすると 33、34行目の @error_handler(edit) および
@validate(form=table) の効果で edit() が呼び出され、再度 table インスタンスが表示されます

32>    @expose()
33>    @error_handler(edit)
34>    @validate(form=table)
35>    def update(self, *args, **kwds):

このときのformタグは  <form method="post" class="tableform" name="form">
というように、インスタンスの作成時に指定した、name や action などの値が無視されてしまいます
これは、submit_text でも同じく、ヴァリデートエラーのときには値が無視されます

TableFormの使い方を間違えているのでしょうか?

-- 
Nakane Ryuji  living at Nagoya
// mailto:[EMAIL PROTECTED]

--~--~---------~--~----~------------~-------~--~----~
このメッセージは、次の Google グループへの参加を申し込まれたことを確認す
るために送信されました。 Google グループ "turbogears-ja" グループ。
 このグループに投稿するには、次の宛先にメールを送信してください。 turbogears-ja@googlegroups.com
 このグループから退会するには、次へメールをお送りください。 [EMAIL PROTECTED]
 その他のオプションについては、次の URL からグループにアクセスしてくださ
い。 http://groups.google.co.jp/group/turbogears-ja?hl=ja
-~----------~----~----~----~------~----~------~--~---

  • ... Nakane Ryuji
    • ... Takashi MATSUO
      • ... [&#x30E1;&#x30FC;&#x30EB;&#x30A2;&#x30C9;&#x30EC;&#x30B9;&#x4FDD;&#x8B77;]
        • ... Takashi MATSUO
          • ... Nakane Ryuji

メールによる返信