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>
clIEntsbase.mako
<%inherit file="base.mako"/><%def name="vIEw()">ClIEnts</%def><% mainactions = [request.route_url('clIEntsnew')]%>
clIEntsindex.mako
<%inherit file="clIEntsbase.mako"/>This is the index
问题是当我尝试访问客户端索引视图时呈现clIEntsindex.mako我得到错误AttributeError:命名空间’self:/base.mako’没有成员’mainactions’.
应该怎样做才能做到这一点?我已经浏览了mako文档,到目前为止我发现的是我可以使用模块级python块来声明mainactions,然后在base.mako中执行self.attr.mainactions.问题在于此块我无法访问请求对象.
我想另一个问题是:在我的情况下,我使用函数作为vIEw-callables,但是假设我已经编写了一个单独的clIEnts.py视图文件,其中包含与客户端相关的所有视图.有没有办法从clIEnts.py文件中以某种方式设置类似控制器范围的上下文变量?这样我就可以在模板的上下文中设置一个mainactions变量,而不必在每个视图的dict中返回它.
解决方法 这是一个相当古老的问题,但在这里,我想它可能会成功.请记住,当您编写模板时,实际上您实际上是在显示函数体().我的猜测是,mainactions被定义为self.body()的局部变量.但是一切都很酷,因为我们可以获得自我…
所以不要写:
mainactions = [request.route_url('clIEntsnew')]
你应该尝试写:
self.mainactions = [request.route_url('clIEntsnew')]
也就是说,这并不是实现您想要做的事情的好方法.如果我是你,我会使用def或block来做.
base.mako
<h1>${self.vIEw()}</h1><%block name="mainaction"></%block>${self.body()}<%def name="Listactions(actions)"> <ul> % for action in actions: <li>${action}</li> % endfor </ul></%def>
clIEntbase.mako
<%inherit file="base.mako"/><%def name="vIEw()">ClIEnts</%def><%block name="mainaction" ${request.route_url('clIEntsnew')}</%block>
剩下的不会改变… def的东西是你只是覆盖了父母的def,然后在base.mako中你使用你想要的def.
这就是它.
总结以上是内存溢出为你收集整理的python – 在子模板或控制器范围的变量中声明的访问变量全部内容,希望文章能够帮你解决python – 在子模板或控制器范围的变量中声明的访问变量所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)