web2py SQLFORM.factory 在使用 vars 调用函数时不工作

web2py SQLFORM.factory not working when function called with vars

我有一个调用函数 get_report_date() 的菜单项以及一个变量 next_url

(T('Return Register'), False, '#', [(T('Daily List'), False, URL('default', 'get_report_date', vars=dict(next_url='returns_daily_list')), []),
(T('Full Register'), False, URL('default', 'returns_register'), []),

我希望函数 get_report_date 通过使用 SQLFORM.factory 制作的表单获取 report_date 的用户输入,并将其作为 var 传递给 next_url

def get_report_date():
    report_date = request.now
    session.flash = 'I am here'
    next_url = request.vars.next_url
    form = SQLFORM.factory(Field('report_date', 'date', requires=IS_NOT_EMPTY()))

    if form.process().accepted:
        report_date = form.vars.report_date
            redirect(URL('%s' % next_url, vars=dict(report_date=report_date)))
    else:
        session.flash = T('Incorrect Date: %s' % form.vars.report_date)
        redirect(URL('index_n'))

我确实有相应的 default/get_report_date.html,代码如下:

{{extend 'layout.html'}}
{{=form}}

但是表格始终打不开,函数直接进入else选项,闪现Incorrect Date:None

我不明白我错在哪里。有人可以指出我的错误并建议如何获得该功能吗?许多报告都需要 get_report_date() 功能。

有两种情况下 form.process().acceptedFalse:(1) 当空表单首次发送到浏览器时(即尚未提交),(2)当表单已提交但验证失败时。您的代码仅假定第二种情况,而未能为第一种情况提供路径。它应该看起来像:

    if form.process().accepted:
        report_date = form.vars.report_date
        redirect(URL('%s' % next_url, vars=dict(report_date=report_date)))
    elif form.errors:
        session.flash = T('Incorrect Date: %s' % form.vars.report_date)
        redirect(URL('index_n'))

    return dict(form=form)

请注意,作为条件逻辑的替代方案,您可以使用 nextonfailure 参数(如 here 所述)来控制提交表单时发生的情况。