加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 在子模板或控制器范围的变量中声明的访问变量

发布时间:2020-12-20 13:22:42 所属栏目: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
我有一个小的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.

这就是它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读