2007-10-09

Widgetのパラメタを動的に変更したいんだが

on ToscaWidgets TurboGears



たとえばCheckBoxListのoptionsは生成時に固定ってことはむしろ少なくて、DBの内容にしたがって動的に変化するもんだと思う。

んが、Widgetの方針でどうも一度最初に生成しておくらしいのだ。困った。試行錯誤の結果、呼出可能オブジェクトを渡せば毎回評価されるってことが判明。


def get_opt():
import time
return [(time.ctime(), time.ctime(), [])]

class MyForm(TableForm):
class fields(WidgetsList):
box = CheckBoxList(options=get_opt)

form = MyForm(action="call")


上の例だと関数を渡してるけど、呼出可能ならなんでもいいらしい。

自分の希望としては、上の定義をさらにクラスの中でやりたいんだけど(つまりget_optのところをメソッドにしたい)、Pythonのスコープ規則を理解できてないのか、変数が未定義のエラーが出てしまって、まだ解決できず。

0 件のコメント: