gpt4 book ai didi

python - Mako:使用全局变量时出现名称错误

转载 作者:太空宇宙 更新时间:2023-11-03 19:09:01 24 4
gpt4 key购买 nike

以下示例来自 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

当您通过 self 命名空间调用 outer() 时,它是在不同的变量范围内调用的,因此您不会在那里得到“x”。 “x”是在“body”def内定义的,因此只有调用body()中定义的outer()才会出现“x”。

关于python - Mako:使用全局变量时出现名称错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13669392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com