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"] = ...