Я использую пирамиду и Мако для шаблонов.
Можно определить (полуанонимную) функцию в блоке Мако <%
и %>
.
Я знаю, что это можно сделать с помощью блока уровня модуля <%!
и %>
, но это означает, что моя функция не имеет доступа к локальной области видимости при шаблонировании, что означает, что я должен передавать каждый бит переменной в этом я нуждаюсь.
Пример:
...template...
<%
variable_in_local_scope = 'blah blah blah'
def my_function():
header_name = variable_in_local_scope.upper()
return header_name
%>
${foo()}
Это выдаст NameError
, сказав, что header_name
не определено. Единственный способ обойти это было закодировать как
<%!
def my_function(input_variable):
return input_variable.upper()
%>
${my_function(variable_in_local_scope)}
Это работает, но когда для функции больше, чем несколько переменных, она становится довольно неудобной. Я также должен повторно импортировать все «вспомогательные» функции, доступные для моего шаблона в блоке уровня модуля.
Есть ли способ обойти это, или я делаю что-то совершенно глупое?