2012-03-13 97 views
1

我已經開始使用web2py用於web應用程序,並試圖使用SQLFORM.grid(...)來顯示我的db-table數據之一的分頁列表,如下面的最小示例中所示。在Web2py中修改sqlform.grid()的列輸出

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

回答

4

你可以實現你的目標當您在模型中定義的表。您在define_table中使用的Field構造函數中的Represent參數將被SQLFORM.grid識別。例如,如果您只想以月份名稱打印日期,則可以將以下內容放入模型中。

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

你的函數也可以轉換爲當地時間。

0

您需要使用prettydate來更改人性化字符串中的日期時間和格式,並在Field()描述符的表示參數中調用它。例如:

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

這樣一來,db.example.date的任何顯示器將顯示人性化,包括通過SQLFORM.grid

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。