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().accepted
会 False
:(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)
请注意,作为条件逻辑的替代方案,您可以使用 next
和 onfailure
参数(如 here 所述)来控制提交表单时发生的情况。
我有一个调用函数 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().accepted
会 False
:(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)
请注意,作为条件逻辑的替代方案,您可以使用 next
和 onfailure
参数(如 here 所述)来控制提交表单时发生的情况。