python – 在子模板或控制器范围的变量中声明的访问变量
我有一个小的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 3支持安装PyGObject
- python – 带函数的返回函数
- day71:drf:API接口&Restful API规范&Django Rest F
- python 性能提升的几种方法
- Python:如何从txt文件中的特定单词开始读取到文件结尾
- python – 来自PyOpengl缓冲区的PIL Image.fromstring的大小
- Django CSRF Coo??kie – 为什么它不会在浏览器关闭时到期?
- 使用python路径设置shebang for python脚本
- 试图在python中打印模块内的每个子模块
- 高德公司的Python面试题!不比大厂的易啊!小白快学学!