DataGridにアンカーを
Turbogears::datagridへのアンカー埋め込み 風に舞う羽毛のようなものたち/ウェブリブログや@paginate() — TurboGears 1.0 documentationの後半を参考に、以下のように組み立ててみる。
from elementtree import ElementTree as ET from controllers import controllers # generate the link inside the datagrid class MakeLink: def __init__(self, baseurl, title=None, param=None): self.baseurl = baseurl if title: self.title = title else: self.title = lambda obj:str(obj) if param: self.param = param else: self.param = lambda obj:{} def __call__(self, obj): url=controllers.url(self.baseurl, self.param(obj)) link = ET.Element('a', href=url, style='text-decoration: underline' ) link.text = self.title(obj) return link
のように用意しておいて、以下のように利用する。
link_pc = myutil.MakeLink('show_form_edit_pc', lambda obj: obj.pcid, lambda obj: dict(pcid=obj.pcid)) pc_list = PaginateDataGrid(fields = [ PaginateDataGrid.Column('pcid', title=u'PC-ID', getter=link_pc, options={'sortable':True, 'reverse_order':True}), # 後略
すると、/show_form_edit_pc?pcid=pcid のようにリンクが張られる。便利。