【问题标题】:Mako inhereting from multiple filesMako 从多个文件继承
【发布时间】:2014-12-10 14:23:41
【问题描述】:

我有一个金字塔应用程序,其中有多个视图,每个视图都取决于一个 mako 模板。视图非常复杂且没有错误,因此我不想拆分或合并视图,以及相应的模板。

但是,我想要一个视图来代表所有其他视图。合并所有金字塔视图和模板实际上不是一种选择。

例如,我有一个登录视图和模板以及一个注册视图和模板。现在我希望我的根页面包含它们。登录和注册都继承自 base.mak,其中包含常用脚本和样式表导入。下面是我想要的mako导入结构的图示。

        base.mak  
       /         \  
login.mak         signup.mak  
       \         /  
        root.mak  

或者,我尝试将它们链接起来: 基础 -> 登录 -> 注册 -> 根

但是,我认为视图不再与它们各自的模板对话。

当我执行第三条链(login.mak -> 注册)时,我的问题就出现了。我将在下面发布类似和提取代码,因为我的完整代码有点长(如果需要更多代码,请随意喊叫)。

base.mak

<!DOCTYPE HTML>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>
            ${next.title()}
        </title> 
        #Imports

        ${next.head()}

    </head>
    <body>
        <div id = "content">
            ${next.body()}
        </div>
    </body> 
</html>

login.mak

<%inherit file="base.mak"/>

<%def name="title()">
    ${next.title()}
</%def>

<%def name="head()">
    ${next.head()}
</%def>

<div id="login">
    <div id="message">
        ${sMessage}
    </div>

    <div id="form">
        <form action="${url}" method="post">      <--- url returned in views.py
...
</div>

${next.body()}

signup.mak

<%inherit file="login.mak"/>

<%def name="title()">
</%def>

<%def name="head()">
</%def>

<div id="box">
...
</div>

现在我的问题是,当我尝试像上面那样继承时,我从视图返回的 url 是未定义的。

当然,如果我得到这个工作,添加 base.mak 以从注册继承应该是微不足道的。

我认为有一个简单的解决方法,但我找不到关于如何在金字塔中执行此操作的示例/说明,模板实际上是在哪里做的。

或者,是否有另一种方法可以将多个金字塔视图和模板组合到一个视图中?

【问题讨论】:

    标签: templates inheritance pyramid mako


    【解决方案1】:

    好的,我想通了。必须使用mako的&lt;%include/&gt;,然后没有复杂的继承结构。所以,现在我的文件看起来像这样:

    root.mak

    <%inherit file="base.mak"/>
    
    <%def name="title()">
        Welcome
    </%def>
    
    <%def name="head()">
    </%def>
    
    
    <%include file="login.mak"/>
    <%include file="signup.mak"/>
    

    login.mak

    <%inherit file="base.mak"/>
    <%def name="title()">
    </%def>
    
    <%def name="head()">
        <link rel="stylesheet" type="text/css" href="${request.static_url(...
    </%def>
    
    <div id="login">
        <div id=".....
    </div>
    

    与 signup.mak 的结构相同。 base.mak 看起来仍然与上面的问题相同。

    现在,如果您正在使用金字塔(我假设另一个框架也可以工作),并且您有从表单接收和传递信息的视图,那么将它们转换为普通函数(没有 @view_config(renderer='path/file.mak') 并将它们的将功能添加到父视图函数中,在我的情况下为root。换句话说:

    @view_config(renderer='pyramidapp:templates/root.mak',
        context=Root,
        name="")
    @forbidden_view_config(renderer='pyramidapp:templates/root.mak')
    def root(self):
        xLoginRet = login(self)
        xSignupRet = signup(self)
        #logic and functionality for both, return stuff to go to base.mak
    

    【讨论】:

      猜你喜欢
      • 2011-04-24
      • 2013-06-25
      • 2013-05-19
      • 2017-04-13
      • 1970-01-01
      • 2014-08-02
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      相关资源
      最近更新 更多