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

问题描述:

我使用Pyramid和Mako进行模板化。Mako模板中的Python函数(不在模块级块中)

可以在Mako块<%%>内定义(半匿名)函数。

我知道它可以用一个模块级块<%!%>来完成,但这意味着我的功能不必在本地范围内时,模板的任何访问,这意味着我不得不变量的每一位经过的,我需要。

例子:

...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)} 

这工作代码,但是当有比对功能的几个变量更多,它得到相当unweildy。我还必须在模块级别块中重新导入可用于我的模板的任何“帮助器”功能。

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

添加字典在您的环境中使用:

template.render(local_vars={}) 

,然后在你的函数中使用它。

注:真子太快,因为发动机将为每个* .MAK(模板文件),一个Python模块之前,使它,你可以试试这个:

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

和检查的内容*。 '/ tmp/mako_modules'中的py文件

做了尝试:locals()["header_name"] = ...