我有一个调用函数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
通过使用report_date
制作的表单获取SQLFORM.factory
的用户输入,并将其作为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()
功能。
答案 0 :(得分:0)
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所示)来控制表单提交时发生的情况。