金字塔框架和主模板/母版页/部分视图

ken*_*ken 9 master-pages pyramid chameleon template-metal

我对.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>
Run Code Online (Sandbox Code Playgroud)

然后,我可以创建一个视图,填充MainContent主页面中标识的空间.

通过这里的金字塔维基教程,我看到作者在他的每个模板中重复了大部分相同的内容 - 通常在母版页中定义的内容 - 并且完全违反了DRY.

金字塔中是否有主页的概念?

Sea*_*ira 16

就像MVC.NET Pyramid可以使用任意数量的模板语言 - 几乎所有模板语言都支持类似于母版页的概念.尽管如此,他们都不他们为:-)

变色龙可能是最远的地方 - 用于在母版页中定义插槽的工具ContentPlaceholder等等)macros在变色龙中被调用,并且由相当重的首字母缩略词METAL(宏扩展模板属性语言)引用.

在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>
Run Code Online (Sandbox Code Playgroud)

Jinja2:

<!DOCTYPE html>
<html>
<head>
<title>{% block title %}{% endblock %}</title>
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

Mako:

<!DOCTYPE html>
<html>
<head>
<title><%block name="title" /></title>
</head>
<body>
<%block name="content" />
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

Breve:

html [
    head [
        title [ slot("title") ]
    ]
    body [
       slot("content")
    ]
]
Run Code Online (Sandbox Code Playgroud)

  • + amillion包括那里的大量模板语言的例子.:-) (4认同)