我已经开始将web2py用于Web应用程序,并尝试使用SQLFORM.grid(...)
显示我的一个db-table数据的分页列表,如下面的最小示例所示。
grid=SQLFORM.grid(query,
links=links,
fields=[db.example.date,db.example.foo, db.example.bar])
db.example.date
字段包含UTC中的Python datetime.datetime对象。目前,它显示就像那样。但是,我希望能够更好地控制实际输出,我可以设置本地时区并将输出字符串修改为“2小时前”。
如另一个问题[0]所示,我可以使用links
插入新列。不幸的是,我似乎无法通过我以这种方式插入的字段对行进行排序。此外,它们插入右侧而不是实际替换我的第一列。所以这似乎不是一个解决方案。
总结一下:我如何控制最终打印db.example.date
的方式?
答案 0 :(得分:4)
您可以在模型中定义表格时实现目标。您在define_table中使用的Field构造函数中的represent参数将被SQLFORM.grid识别。例如,如果您只想使用月份名称打印日期,则可以将以下内容放入模型中。
Field('a_date', type='date', represent=lambda x, row: x.strftime("%B %d, %Y")),
您的功能也可以转换为当地时间。
答案 1 :(得分:0)
您需要使用prettydate更改人性化字符串中的日期时间和格式,并在Field()描述符的represent参数中调用它。例如:
from gluon.tools import prettydate
db.example.date.represent = lambda v,r: prettydate(r.date)
这样,db.example.date的任何显示都将显示为人性化,包括通过SQLFORM.grid
答案 2 :(得分:0)
如果您不希望按照David Nehme的回答以这种方式表示日期。在网格创建之前,您可以在控制器中设置db.table.field.represent。
db.example.date.represent = lambda value, row: value.strftime("%B %d, %Y")
接着是。
grid = SQLFORM.grid(query,....
我连接表时经常使用它。如果模型文件中的表示中存在row.field,则它会中断,因为它必须更具体,即row.table.field。