我有一个类似下面的菜单:
response.menu = [
[T('Home'), False,
URL(request.application,'default','index'), []],
[T('Request Log'), False, URL(request.application, 'default', 'method1'),],
[T('Management Log'), False, URL(request.application, 'default', 'method2?filter_scenario=%s'%my_dynamic_var),],
]
现在my_dynamic_var
应该从表单的字段中获取。
任何人都可以帮我破解这个。
先谢谢。
答案 0 :(得分:0)
您可以在控制器功能中修改/附加到response.menu,这样您就可以尝试在models / menu.py中设置菜单的主要部分,然后添加相应控制器内的“管理日志”条目功能
此外,在生成URL时,您无需执行'method2?filter_scenario =%s'%my_dynamic_var,您应该让URL()帮助程序为您处理,如下所示:
URL(request.application, 'default', 'method2', vars=dict(filter_scenario = my_dynamic_var))
所以一起尝试这样的事情
response.menu = [
[T('Home'), False,
URL(request.application,'default','index'), []],
[T('Request Log'), False, URL(request.application, 'default', 'method1'),],
]
def method2():
form = FORM(#define your form here)
if form.accepts(request.vars, session):
#add in extra menu option
response.menu.append([T('Management Log'), False, URL(request.application, 'default', 'method2', vars=dict(filter_scenario = form.vars.my_dynamic_var)),])
答案 1 :(得分:0)
答案一个不起作用。答案实际上取决于工作流程,但是,例如,您可以这样做:
response.menu = [
[T('Home'),False,URL('default','index')],
[T('Request Log'), False, URL('default', 'method1')],
]
if session.my_dynamic_var: response.menu+=[
[T('Management Log'), False, URL('default', 'method2',
vars=dict(filter_scenario=session.my_dynamic_var))]]
并在控制器中创建一个动作来设置值:
def method1():
form = SQLFORM.factory(Field('my_dynamic_var'))
if form.accepts(request, session):
session.my_dynamic_var=form.vars.my_dynamic_var
return dict(form=form)
请在web2py邮件列表中提出这些问题。这就是专家的所在。