2012-06-29 7 views
9

私は.NET MVCを経験しており、Pythonフレームワークを学びたいと思っています。私はピラミッドを選んだ。Pyramidフレームワークとマスターテンプレート/マスターページ/部分ビュー

.NET MVCは、マスターページビュー部分図の概念を持っています。私は、マスターページにMainContentで識別されるスペースを埋めるだろうビューを作成することができます

<%@ 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> 

:マスターページには、次のようになります。通常、マスターページで定義されることになるコンテンツ - - ピラミッドのwikiのチュートリアルhereを通って行く

は、私が見著者は彼の各テンプレートで同じ内容の多くを繰り返しており、完全に乾燥しに違反していました。

ピラミッドのマスターページの概念はありますか?

+1

、この答えを見てい:http://stackoverflow.com/a/11025111/320021 - どのようにあなたの例をマスターテンプレートをChameleonのビューに渡すことができます。 – Sergey

+0

最新のテンプレートエンジンで実装されている主なコード再利用方法は、 * 1つのテンプレートに他のテンプレートやテンプレートの一部を含めることができます。 *親テンプレートを変更または拡張するために1つのテンプレートは継承できます。 –

答えて

15

MVC.NETのようにPyramidは任意の数のテンプレート言語を使用できます。ほとんどすべてがマスターページに似た概念をサポートしています。 ;-)

しかしカメレオンは最も遠いそこにおそらくあると、それらのどれコールそれら - あなたはマスターページContentPlaceholderのスロットを定義するために使用するツール、など)はカメレオンで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> 

ブレーベ:SeanVieraの答え@に加えて

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

私はマクロについて読んだことがありますが、何らかの理由で彼らは何か他のものに使われていると思っていました。私はそれらをさらに調べます。 – ken

+4

+そこにテンプレート言語の負荷の例を含めるとamillion。 :-) –

関連する問題