Доступ к переменным, определенным в пространстве имен Мако - PullRequest
2 голосов
/ 14 июля 2011

Обычно "импорт" пространства имен в Mako, по-видимому, разрешает только доступ к defs.

## base.mako
<%
  somevar = ["one", "two", "three"]
%>

<%def name="foo()">Bar</%def>

И шаблон импорта:

## child.mako
<%namespace name="base" file="base.mako" />

${base.foo()} # works
${base.somevar} # fails: no soup for you

В моем случае использования somevarи foo связаны между собой.Мне было бы удобно иметь возможность доступа к somevar из шаблона импорта.Какова лучшая практика для этого?

Ответы [ 2 ]

4 голосов
/ 06 декабря 2011

У меня была такая же проблема - ответ в документации по наследованию:

Аксессор attr объекта Namespace обеспечивает доступ к переменным уровня модуля, объявленным в шаблоне. Получив доступ к self.attr, вы можете получить доступ к обычным атрибутам из цепочки наследования, как объявлено в <%! %> разделы.

Таким образом, вы хотите base.attr.somevar Я думаю.

2 голосов
/ 15 июля 2011

Как предлагает пользователь 9000 выше, я нашел один способ сделать это.Я публикую это так, чтобы это было задокументировано на случай, если кому-то еще это понадобится, но я все еще надеюсь, что кто-то с большим опытом может сделать это лучшим способом.

Насколько я могу судить, вы не можете получить доступ к определенным функциямв блоке модуля через пространство имен, но вы можете получить доступ к <%def>.По умолчанию <%def> блокирует дамп прямо в буфер контекста, поэтому вам нужно выполнить некоторые искажения:

## base.mako
<%!
  somevar = ["one", "two", "three"]
%>

<%def name="getSomeVar()">
  <%
    return somevar
  %>
</%def>

Затем из другого шаблона импортируйте пространство имен base.mako как base и получите доступ к ${base.getSomeVar()}, чтобы получитьзначение somevar.

...