Mako模板中的Python函数(不在模块级块中)

Mako模板中的Python函数(不在模块级块中),python,function,templating,mako,Python,Function,Templating,Mako,我用金字塔和Mako做模板 可以在Mako块中定义(半匿名)函数 我知道可以使用模块级块,但这意味着我的函数在模板化时无法访问本地范围,这意味着我必须传递所需的每一位变量 例如: ...template... <% variable_in_local_scope = 'blah blah blah' def my_function(): header_name = variable_in_local_scope.upper() return header_name %>

我用金字塔和Mako做模板

可以在Mako块中定义(半匿名)函数

我知道可以使用模块级块
,但这意味着我的函数在模板化时无法访问本地范围,这意味着我必须传递所需的每一位变量

例如:

...template...
<%
variable_in_local_scope = 'blah blah blah'
def my_function():
    header_name = variable_in_local_scope.upper()
    return header_name
%>
${foo()}
这是可行的,但当函数有多个变量时,它会变得非常不舒服。我还必须在模块级块中重新导入模板可用的任何“助手”函数


有什么办法可以解决这个问题,还是我在做一些完全愚蠢的事情?

您是否尝试过:
locals()[“header\u name”]=…
在您的上下文中使用以下方法添加词典:

template.render(local_vars={})
然后在函数中使用它

注意:Mako速度太快,因为引擎将在渲染之前为每个*.mak(模板文件)创建一个python模块,您可以尝试以下操作:

from mako.template import Template
mytemplate = Template(filename='/docs/mytmpl.txt', module_directory='/tmp/mako_modules')
print mytemplate.render()
并检查“/tmp/mako_模块”中*.py文件的内容

from mako.template import Template
mytemplate = Template(filename='/docs/mytmpl.txt', module_directory='/tmp/mako_modules')
print mytemplate.render()