Если вы используете помощник MENU
, при его вызове вы можете указать текущий URL как активный:
MENU(response.menu, active_url=URL())
Примечание. URL()
без аргументов возвращает часть URL-адреса, содержащую приложение, контроллер и функцию для текущего запроса. URL(args=request.args)
также включает текущую request.args
, и, наконец, URL(args=request.args, vars=request.get_vars)
дополнительно включает строку запроса текущего запроса. Если URL вашего пункта меню включают args
или vars
, то вам также нужно будет передать их как active_url
, иначе совпадения не будет.
В качестве альтернативы, для каждого пункта меню вы можете сделать что-то вроде:
current_url = URL(args=request.args, vars=request.vars)
response.menu = [
['Item1', URL('item1') == current_url, URL('item1')],
['Item2', URL('item2', args='arg1') == current_url, URL('item2', args1='arg1')],
...
]
Чтобы избежать избыточности, вы можете использовать помощника, например:
def menu_item(label, *args, **kwargs):
url = URL(*args, **kwargs)
return [label, url == URL(args=request.args, vars=request.get_vars), url]
response.menu = [
menu_item('Item1', 'item1'),
menu_item('Item2', 'item2', args='args1'),
menu_item('Item3', 'item3', args='args1', vars=dict(var1=1))
]
Если вы не хотите сопоставлять строку запроса, чтобы определить активный URL, исключите vars=request.get_vars
из вызова на URL()
в menu_item
.