【问题标题】:Modify column output for sqlform.grid() in Web2py修改 Web2py 中 sqlform.grid() 的列输出
【发布时间】:2012-03-29 12:11:25
【问题描述】:

我已经开始将 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]Calculated Fields in web2py sqlgrid

【问题讨论】:

    标签: python web2py


    【解决方案1】:

    如果您不想按照 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。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        当您在模型中定义表格时,您就可以实现您的目标。您在 define_table 中使用的 Field 构造函数中的表示参数将被 SQLFORM.grid 识别。例如,如果您只想打印带有月份名称的日期,您可以在模型中添加以下内容。

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

        您的函数也可以转换为当地时间。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-02
          • 1970-01-01
          相关资源
          最近更新 更多