其实现在对 widgets.Form 的实现机制还不是很清楚 但是看到 widgets.TableForm 与 widgets.ListForm 的用法,基本上就是在继承 widgets.Form 的时候加入一个 template 属性. 这个 template 是一个带有 kid 名称空间的字符串,也就是一个kid模版 通过这个kid模版,tg实现了对form的封装

下面是我简单的根据 widgets.Form 派生了一个我自己的日历表单.

首先,定义一个 CalendarForm 类:
import widgets

class CalendarForm(widgets.Form):
template = """ """ # xml 代码无法显示,其实copy widgets.ListForm的template就可以了

calendar_form = CalendarForm(fields=[widgets.CalendarDatePicker()],
submit_text="choose date")

class Root:
@expose(template="your.template.form")
index(self):
return dict(calendar_form=calendar_form)

@expose()
def getdate(self, datetime):
turbogears.flash("Got Datetime!")
raise redirect("/")

再在模版文件里面写上,
${calendar_form(action="getdate")

}一个最简单的日历表单就做好了.

但是和我的想法还差得比较远,还得一边学js一边改了.