python – 在子模板或控制器范围的变量中声明的访问变量
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 在子模板或控制器范围的变量中声明的访问变量,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1868字,纯文字阅读大概需要3分钟。
内容图文
![python – 在子模板或控制器范围的变量中声明的访问变量](/upload/InfoBanner/zyjiaocheng/769/027b816f38874d1ead7b4250196d8dab.jpg)
我有一个小的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>
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 – 在子模板或控制器范围的变量中声明的访问变量所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。