例如在控制器中我有以下查询:
a= db().select(db.my_db.ALL)
如何添加视图按钮,以便实时显示字段a.date大于用户选择日期的行。我已经看到我可以使用ajax实时刷新表格,但我不知道如何添加带日期的按钮。
有没有人有想法?
答案 0 :(得分:1)
使用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)
这将填充一个临时表,其中包含一些要查看的数据。
在您的控制器中:
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())
Above创建一个带有html5日期输入和按钮的表单。按下按钮后,web2py库中的ajax
函数会将表单输入['since']
发布到函数recent_table
,并将结果放入ID为show_table
的DOM元素中。
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()
上面会读取ajax调用发布的since
参数,如果找不到since
,则默认为5天。然后它会找到符合您请求的表中的所有行。
在你看来:
{{extend 'layout.html'}}
{{=form}}
<div id="show_table">
{{=prefill}}
</div>
在视图中包含结果form
,定义ajax函数应该删除它的区域的结果(在ajax调用中定义show_table
)并填写{{1已经计算过,因此用户在第一页加载时有数据。