2012-06-29 68 views
9

我對.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在母版頁確定的空間。

通過金字塔維基教程here去,我看到筆者反覆多在他的每個模板的內容相同的 - 內容通常會在母版頁中定義 - 而且完全違背DRY

金字塔中是否有母版頁的概念?

+1

除了@ SeanViera的回答,看看這個答案:http://stackoverflow.com/a/11025111/320021 - 對於如何爲例可以將主模板傳遞給變色龍視圖。 – Sergey

+0

有通過最現代的模板引擎實現了兩個主要的代碼重用方法: *一個模板可以包括其他模板或模板 碎片*一個模板可以從另一個模板,以改變或擴展父模板 –

回答

15

就像MVC.NET金字塔可以使用任意數量的模板語言 - 幾乎所有的支持類似於母版頁的概念。他們沒有呼叫他們,雖然;-)

變色龍可能是最遠在那裏 - 你使用的母版頁ContentPlaceholder等)來定義插槽工具變色龍被稱爲macros和簡稱相當重的首字母縮略詞METAL (Macro Expansion Template Attribute Language)

在Jinja2的和真子,他們被稱爲blocks和短音稱他們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") 
    ] 
] 
+0

由於繼承。我曾閱讀過關於宏的內容,但由於某種原因,我認爲它們已被用於其他方面。我會進一步研究它們。 – ken

+4

+ amillion包含了模板語言的例子。 :-) –