web2py实时特定表

时间:2015-09-29 12:58:25

标签: html ajax web2py

例如在控制器中我有以下查询:

a= db().select(db.my_db.ALL)

如何添加视图按钮,以便实时显示字段a.date大于用户选择日期的行。我已经看到我可以使用ajax实时刷新表格,但我不知道如何添加带日期的按钮。

有没有人有想法?

1 个答案:

答案 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已经计算过,因此用户在第一页加载时有数据。