我们在很久以前就决定在我们的Django项目中使用Mako模板。我们也支持Django模板,因为很多可重用的应用程序(显然)都假定Django模板可用。我发现可以从Mako渲染Django模板,但是我一直无法找到一种方法让它以相反的方式工作。我怎样才能得到一个Django模板呈现在一个Mako模板中?
我刚刚将django-articles添加到了我们的应用程序列表中,并且它使用了Django模板。它假定base.html
文件是一个被覆盖的Django模板。不幸的是,我们的主站点是使用Mako构建的。我还无法找到Django模板的一个干净的方式,以自己在Mako内的host
。
我想我想要的是一个模板标签,它会向Mako发出请求并要求'嵌入'。
我们真子模板所有正在执行以下操作:
<%inherit file="mako/base.html"/>
我要的是能够从Django模板做这样的事情:
{% render_in_mako 'mako/base.html' 'body' %}
随着`鲭以下/base.html':
</head>
<body>
<%include file="header.html" />
${next.body()}
</body>
</html>
有没有人有过这样做?我对写模板标签不是很熟悉。你认为这可以做到吗?另一种方法可能是重写所有Mako中的模板,这根本不会吸引我。模板标签对于我认为使用Mako的很多项目来说是非常有用的。
感谢您的回复。 Jinja和Mako有点类似,我相信。我所指的body参数是Mako模板中的函数调用。在Mako中,这只意味着'渲染派生模板主体'。我想我需要再看看Mako,看看是否可以使用python函数调用来提供文本块(html)以及用作基础的模板。我暂时把这件事搁置一旁,但如果我能做到这一点,我会在这里发布一个答案。欢呼输入。 – 2011-04-10 11:17:34
@JoshSmeaton,谢谢你的澄清。我认为你正在寻找的功能是['mako.template.Template'](http://www.makotemplates.org/docs/usage。html#basic-usage),它将模板作为参数并返回一个'Template'对象。这个对象有一个'render()'方法,用给定的上下文参数呈现模板。我现在唯一关心的是在模板被渲染时,'body()'函数是否默认执行。如果我得到一个工作示例,我会在我的答案中发布代码。 – 2011-04-10 19:50:34
编辑:我意识到编辑太迟,我没有你的Mako模板继承结构的知识,所以我不能真正复制$ {next.body}的行为。 – 2011-04-10 21:19:20