我有一个小的 mako 模板层次结构,类似于:
base.mako
<h1>${self.view()}</h1>
${listactions(self.mainactions)}
${self.body()}
<%def name="listactions(actions)">
<ul>
% for action in actions:
<li>${action}</li>
% endfor
</ul>
</%def>
客户群.mako
<%inherit file="base.mako"/>
<%def name="view()">Clients</%def>
<%
mainactions = [request.route_url('clientsnew')]
%>
客户索引.mako
<%inherit file="clientsbase.mako"/>
This is the index
问题是当我尝试访问呈现 clientsindex.mako 的客户端索引视图时,我收到错误AttributeError: Namespace 'self:/base.mako' has no member 'mainactions'。
这样做的正确方法应该是什么?我已经浏览了 mako 文档,到目前为止我发现我可以使用模块级 python 块来声明 mainactions ,然后在 base.mako 中执行self.attr.mainactions。问题在于这个块内我无权访问请求对象。
我想另一个问题是:在我的情况下,我将函数用作视图可调用对象,但假设我编写了一个单独的 clients.py 视图文件,其中包含与客户端相关的所有视图。有没有办法以某种方式从clients.py文件中设置类似控制器范围的上下文变量?这样我就可以在模板的上下文中设置一个 mainactions 变量,而无需在每个视图的字典中返回它。