web2py的SQLFORM.grid组建是表格化数据,针对时upload的字段,提供的文件的下载地址,例如:
针对一些图片文件,我们想直接在SQLFORM.grid的表格里中看到图片:
一、field的represent
在构建表的字段时,Filed有个represent的属性,它用且仅用于 web2py的自带Table、Form、grid等自带组件在前端展示时的 “替代展现”,其他场景下访问读取数据表,还是得到的数据原始内容:
db.define_table('person',
Field('name','string',label='姓名',writable=False),
Field('photo','upload',label='影像',
uploadfolder=os.path.join(request.folder,'photo'),uploadseparate=True,autodelete=True))
#我们定义的represent方法
db.person.photo.represent = lambda photo,row: grid_image_show(photo,'80px')
二、grid_image_show操作方法
def grid_image_show(file_name,height): return XML('<img height="'+height+'" src="/default/download/'+file_name+'"/>')
这里我们构建URL用到了web2py自带default.py的download方法:
@cache.action() def download(): return response.download(request, db)
最后使用XML函数,直接在grid的单元格中输出 html源代码,
最终效果,我们看到represent的字段,展示出来的是图片: