【问题标题】:Pyramid framework and master templates / master page / partial viewsPyramid 框架和主模板/母版页/部分视图
【发布时间】:2014-12-03 23:56:39
【问题描述】:

我有 .NET MVC 方面的经验,想学习 Python 框架。我选择了金字塔。

.NET MVC 具有母版页、视图和部分视图的概念。母版页看起来像:

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>
<!DOCTYPE html>
<html>
<head runat="server">
    <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title>
</head>
<body>
    <div>
        <asp:ContentPlaceHolder ID="MainContent" runat="server" />
    </div>
</body>
</html>

然后我可以创建一个视图,该视图将填充母版页中MainContent 标识的空间。

通过 Pyramid wiki 教程 here,我看到作者在他的每个模板中都重复了许多相同的内容——通常在母版页中定义的内容——并且完全违反了 DRY 。

Pyramid 中有母版页的概念吗?

【问题讨论】:

  • 除了@SeanViera 的回答,看看这个回答:stackoverflow.com/a/11025111/320021 - 有关如何使用 Chameleon 将主模板传递给视图的示例。
  • 大多数现代模板引擎实现了两种主要的代码重用方法: * 一个模板可以包含其他模板或模板片段 * 一个模板可以从另一个模板继承以更改或扩展父模板

标签: master-pages pyramid chameleon template-metal


【解决方案1】:

就像 MVC.NET Pyramid 可以使用任意数量的模板语言一样 - 几乎所有模板语言都支持类似于母版页的概念。他们都没有打电话他们虽然;-)

Chameleon 可能是最远的——用于在母版页中定义插槽的工具 ContentPlaceholder 等)在 Chameleon 中称为 macros,并由相当重的首字母缩略词 METAL (Macro Expansion Template Attribute Language) 引用。

在 Jinja2 和 Mako 中,他们被称为 blocks,Breve 称他们为 slots。

以下是它们各自的母版页的外观:

变色龙:

<!-- Caveat Emptor - I have never used Chameleon in anger -->
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:tal="http://xml.zope.org/namespaces/tal"
  xmlns:metal="http://xml.zope.org/namespaces/metal"
  xmlns:i18n="http://xml.zope.org/namespaces/i18n">
<!-- We don't *need* all of this in Chameleon, but it's worth 
remembering that it adds it for us -->
<head>
<title metal:define-macro="title"><span metal:define-slot="title"></span></title>
</head>
<body metal:define-macro="content">
<div metal:define-slot="content"></div>
</body>
</html>

Jinja2:

<!DOCTYPE html>
<html>
<head>
<title>{% block title %}{% endblock %}</title>
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>

魔子:

<!DOCTYPE html>
<html>
<head>
<title><%block name="title" /></title>
</head>
<body>
<%block name="content" />
</body>
</html>

简洁:

html [
    head [
        title [ slot("title") ]
    ]
    body [
       slot("content")
    ]
]

【讨论】:

  • 谢谢。我读过宏,但出于某种原因,我认为它们被用于其他用途。我会进一步调查。
  • +amillion 用于在其中包含大量模板语言的示例。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多