如何将表单值(动态)传递给web2py上的菜单?这应该反映在URL中

时间:2011-04-05 15:35:46

标签: web2py

我有一个类似下面的菜单:

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应该从表单的字段中获取。 任何人都可以帮我破解这个。

先谢谢。

2 个答案:

答案 0 :(得分:0)

我建议在web2py google group

上询问

您可以在控制器功能中修改/附加到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))

所以一起尝试这样的事情

模型/ menu.py

response.menu = [
    [T('Home'), False, 
     URL(request.application,'default','index'), []],
    [T('Request Log'), False, URL(request.application, 'default', 'method1'),],
    ]

控制器/ default.py

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邮件列表中提出这些问题。这就是专家的所在。