其实现在对 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一边改了.