编程语言
首页 > 编程语言> > Mako模板中的Python函数(不在模块级块中)

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

作者:互联网

我正在使用Pyramid和Mako进行模板化.

可以在Mako块中定义(半匿名)函数<%和%>.

我知道可以使用模块级块<%!和%&gt ;,但这意味着我的函数在模板时没有任何访问本地范围的权限,这意味着我必须传递我需要的每一个变量. 例:

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

这是有效的,但是当函数有多个变量时,它会非常不合适.我还必须重新导入模块级块中我的模板可用的任何“帮助器”功能.

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

解决方法:

使用以下内容在上下文中添加字典:

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文件的内容

标签:python,function,templating,mako
来源: https://codeday.me/bug/20190630/1337217.html