Web2py

2012-03-13 8 views
1
내가 웹 응용 프로그램 web2py를 사용하기 시작했다

에 sqlform.grid에 대한 열 출력()을 수정하고 다음과 같은 최소한의 예처럼 내 DB 테이블의 데이터 중 하나의 페이지가 매겨진 목록을 표시 할 SQLFORM.grid(...)를 사용하려고합니다.Web2py

grid=SQLFORM.grid(query, 
    links=links, 
    fields=[db.example.date,db.example.foo, db.example.bar]) 

db.example.date 필드는 파이썬에게 UTC에서 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를 사용하여 필드() 기술자의 대표 매개 변수를 호출해야합니다.

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이어야하므로 파손됩니다.