Как передать значение формы (которое является динамическим) в меню на web2py?То есть это должно быть отражено в URL - PullRequest
1 голос
/ 05 апреля 2011

У меня есть меню, похожее на приведенное ниже:

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 голосов
/ 08 апреля 2011

Ответ один не работает.Ответ действительно зависит от рабочего процесса, но, например, вы можете сделать:

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.Вот где эксперты.

0 голосов
/ 06 апреля 2011

Я бы порекомендовал спросить в 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)),])
...