9

私は.NETMVCの経験があり、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

ここでPyramidwikiチュートリアルを見ると、作成者が各テンプレートで同じコンテンツ(通常はマスターページで定義されるコンテンツ)の多くを繰り返しており、DRYに完全に違反していることがわかります。

Pyramidにマスターページの概念はありますか?

4

1 に答える 1

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>

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")
    ]
]
于 2012-06-29T04:00:03.417 に答える