Mako docs中的以下示例实际上不起作用:
<%
x = 12
%>
<%def name="outer()">
<%
y = 15
%>
<%def name="inner()">
inner, x is ${x}, y is ${y}
</%def>
outer, x is ${x}, y is ${y}
</%def>
当我在下面添加
<%self:outer />
来调用def(文件中没有其他内容)时,页面将出错,并且我的apache日志显示[Sun Dec 02 13:25:08 2012] [error] [client 89.247.172.1] File "/tmp/mako_template_cache/index.html.mako.py", line 82, in render_outer
[Sun Dec 02 13:25:08 2012] [error] [client 89.247.172.1] __M_writer(str(x))
[Sun Dec 02 13:25:08 2012] [error] [client 89.247.172.1] File "/usr/lib/python3/dist-packages/mako/runtime.py", line 195, in __str__
[Sun Dec 02 13:25:08 2012] [error] [client 89.247.172.1] raise NameError("Undefined")
[Sun Dec 02 13:25:08 2012] [error] [client 89.247.172.1] NameError: Undefined
我可能做错了什么?我有Debian的Mako 0.7.0,应该可以使用。
最佳答案
文档中提供的模板实际上并没有执行任何操作,因为它甚至没有调用inner()
或outer()
。文档描述的用法是本地函数调用:
from mako.template import Template
print Template("""
<%
x = 12
%>
<%def name="outer()">
<%
y = 15
%>
<%def name="inner()">
inner, x is ${x}, y is ${y}
</%def>
outer, x is ${x}, y is ${y}
${inner()}
</%def>
${outer()}
""").render()
输出:
outer, x is 12, y is 15
inner, x is 12, y is 15
当您通过
outer()
命名空间调用self
时,会在另一个变量范围内调用它,因此您不会在此处得到“ x”。 “ x”是在“ body”定义中定义的,因此只有在body()中定义的调用external()时才会出现“ x”。关于python - Mako:使用全局变量时出现NameError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13669392/