Mako:向父模板和子模板传递变量

4 投票
1 回答
1430 浏览
提问于 2025-04-17 06:06

目标:希望在基础模板和子模板中都能访问到myargs这个变量。目前我只能在其中一个模板中访问到它。

调用:

child.render(myargs={'a':2, b:'5'})

基础片段:

<%page args="myargs=None, **kwargs"/>
% if myargs['a']:
    a is: ${myargs['a']}
% endif
${self.body(myargs=myargs)}

子片段版本1:

<%page args="myargs=None, **kwargs"/>
<%inherit file="/base.html" />

% if myargs['b']:
    b is: ${myargs['b']}
% endif

子片段版本2:

<%page args="myargs=None, **kwargs"/>
<%inherit file="/base.html" />
<%def name="body()">
% if myargs['b']:
    b is: ${myargs['b']}
% endif
</%def>

使用子版本1时,子模板报错,因为myargs没有定义,而基础模板正常工作。使用子版本2时,基础模板报错,因为myargs没有定义,而子模板正常工作。

这些不是准确的例子,但大致上反映了我的困境。如果有人能解释一下如何在继承链中传递变量,那就太好了。不幸的是,Mako的文档似乎没有涉及这一部分。

1 个回答

3

哈哈,这个解决方案真简单。

结果发现,“页面参数”对这个问题没什么用,实际上它们在某个页面上把“myargs”给覆盖成了“None”,反而造成了问题。其实,关键字变量可以直接从两个文件中访问,不需要用“页面参数”。

撰写回答