web2py 实时特定 table
web2py real time specific table
例如在控制器中我有以下查询:
a= db().select(db.my_db.ALL)
如何在视图中添加一个按钮,以便实时仅显示字段 a.date 大于用户所选日期的行。我看到我可以使用 ajax 实时刷新 table,但我不知道如何添加带日期的按钮。
有人知道吗?
使用web2py's Ajax很简单:
在您的模型中:
import datetime
import arrow # nifty library to parse dates, http://arrow.readthedocs.org/en/latest/
mem = DAL('sqlite:memory')
mem.define_table('some_data',Field('effdt','date',default=request.now), Field('foo',default='bar'))
for x in range(100):
when = request.now - datetime.timedelta(x)
what = arrow.get(when).humanize()
mem.some_data.insert(foo=what,effdt=when)
这将填充临时 table 一些数据以供查看。
在你的控制器中:
def index():
form = FORM(
INPUT(_type='date', _name='since'),
BUTTON('click me',_onclick="ajax('{}',['since'],'show_table');".format(URL(f='recent_table')))
)
return dict(form=form, prefill=recent_table())
上面创建了一个带有 html5 日期输入和按钮的表单。当按下按钮时,来自 web2py 库的 ajax
函数将 post 表单输入 ['since']
到函数 recent_table
并将结果放入 DOM 元素ID show_table
。
return 语句提供表单并执行 recent_table
一次,因此您在第一次加载时就已经有了数据。
def recent_table():
if request.vars.since:
since = arrow.get(request.vars.since).datetime
else:
since=request.now-datetime.timedelta(5)
return mem(mem.some_data.effdt >= since).select()
上面读取了 post 由 ajax 调用编辑的 since
参数,如果找不到 since
,则默认为今天减去 5 天。然后它会找到 table 中与您的请求匹配的所有行。
在您看来:
{{extend 'layout.html'}}
{{=form}}
<div id="show_table">
{{=prefill}}
</div>
在包含结果 form
的视图中,定义 ajax 函数应丢弃其结果的区域(在 ajax 调用中定义 show_table
)和填写已计算的 prefill
以便用户在第一页加载时有数据。
例如在控制器中我有以下查询:
a= db().select(db.my_db.ALL)
如何在视图中添加一个按钮,以便实时仅显示字段 a.date 大于用户所选日期的行。我看到我可以使用 ajax 实时刷新 table,但我不知道如何添加带日期的按钮。
有人知道吗?
使用web2py's Ajax很简单:
在您的模型中:
import datetime
import arrow # nifty library to parse dates, http://arrow.readthedocs.org/en/latest/
mem = DAL('sqlite:memory')
mem.define_table('some_data',Field('effdt','date',default=request.now), Field('foo',default='bar'))
for x in range(100):
when = request.now - datetime.timedelta(x)
what = arrow.get(when).humanize()
mem.some_data.insert(foo=what,effdt=when)
这将填充临时 table 一些数据以供查看。
在你的控制器中:
def index():
form = FORM(
INPUT(_type='date', _name='since'),
BUTTON('click me',_onclick="ajax('{}',['since'],'show_table');".format(URL(f='recent_table')))
)
return dict(form=form, prefill=recent_table())
上面创建了一个带有 html5 日期输入和按钮的表单。当按下按钮时,来自 web2py 库的 ajax
函数将 post 表单输入 ['since']
到函数 recent_table
并将结果放入 DOM 元素ID show_table
。
return 语句提供表单并执行 recent_table
一次,因此您在第一次加载时就已经有了数据。
def recent_table():
if request.vars.since:
since = arrow.get(request.vars.since).datetime
else:
since=request.now-datetime.timedelta(5)
return mem(mem.some_data.effdt >= since).select()
上面读取了 post 由 ajax 调用编辑的 since
参数,如果找不到 since
,则默认为今天减去 5 天。然后它会找到 table 中与您的请求匹配的所有行。
在您看来:
{{extend 'layout.html'}}
{{=form}}
<div id="show_table">
{{=prefill}}
</div>
在包含结果 form
的视图中,定义 ajax 函数应丢弃其结果的区域(在 ajax 调用中定义 show_table
)和填写已计算的 prefill
以便用户在第一页加载时有数据。