Python 修改Web2py中sqlform.grid()的列输出

Python 修改Web2py中sqlform.grid()的列输出,python,web2py,Python,Web2py,我已经开始在web应用程序中使用web2py,并尝试使用SQLFORM.grid(…)来显示我的db表数据之一的分页列表,如下面的示例所示 grid=SQLFORM.grid(query, links=links, fields=[db.example.date,db.example.foo, db.example.bar]) db.example.date字段包含UTC格式的Python datetime.datetime对象。目前,它的表现就是这样。但是,我希望对实际输出有

我已经开始在web应用程序中使用web2py,并尝试使用
SQLFORM.grid(…)
来显示我的db表数据之一的分页列表,如下面的示例所示

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]所示,我可以使用
链接插入新列。不幸的是,我似乎无法按照以这种方式插入的字段对行进行排序。此外,它们被插入右侧,而不是实际替换我的第一列。因此,这似乎不是一个解决方案

总而言之:我如何控制
db.example.date
最终打印出来的方式


[0]

在模型中定义表时,您可以实现目标。SQLFORM.grid将识别define_表中使用的字段构造函数中的Represente参数。例如,如果只想打印带有月份名称的日期,可以在模型中输入以下内容

Field('a_date', type='date', represent=lambda x, row: x.strftime("%B %d, %Y")),

您的函数还可以转换为本地时间。

在模型中定义表时,您可以实现目标。SQLFORM.grid将识别define_表中使用的字段构造函数中的Represente参数。例如,如果只想打印带有月份名称的日期,可以在模型中输入以下内容

Field('a_date', type='date', represent=lambda x, row: x.strftime("%B %d, %Y")),

您的函数还可以转换为本地时间。

您需要使用prettydate更改人性化字符串中的日期时间和格式,并在Field()描述符的represente参数中调用它。例如:

from gluon.tools import prettydate
db.example.date.represent = lambda v,r: prettydate(r.date)

这样,db.example.date的任何显示都将人性化,包括通过SQLFORM.grid进行显示

您需要使用prettydate更改人性化字符串中的日期时间和格式,并在Field()描述符的代表参数中调用它。例如:

from gluon.tools import prettydate
db.example.date.represent = lambda v,r: prettydate(r.date)

这样,db.example.date的任何显示都将人性化,包括通过SQLFORM.grid

显示,如果您不希望按照David Nehme的回答始终以这种方式表示日期。在创建网格之前,可以在控制器中设置db.table.field.representation

db.example.date.represent = lambda value, row: value.strftime("%B %d, %Y")
接着是

grid = SQLFORM.grid(query,....

我在连接表时经常使用此选项。如果模型文件的表示中有一个row.field,它会被打断,因为它必须是更具体的row.table.field。

如果您不想按照David Nehme的回答始终以这种方式表示日期。在创建网格之前,可以在控制器中设置db.table.field.representation

db.example.date.represent = lambda value, row: value.strftime("%B %d, %Y")
接着是

grid = SQLFORM.grid(query,....
我在连接表时经常使用此选项。如果模型文件中的表示中有row.field,它将被打断,因为它必须是更具体的row.table.field