我正在使用Pyramid和Mako进行模板化。
可以在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)}
这样可行,但是当函数有多个变量时,它会非常不合适。我还必须在模块级块中重新导入我的模板可用的任何“帮助”功能。
有没有办法解决这个问题,还是我做了一些完全愚蠢的事情?
答案 0 :(得分:3)
使用以下方法在您的上下文中添加字典:
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_modules'中的* .py文件的内容
答案 1 :(得分:0)
locals()["header_name"] = ...