2012-06-29 12 views
9

Mam doświadczenie z .NET MVC i chęcią nauczenia się frameworka Pythona. Wybrałem Pyramid.Ramka piramidy i szablony wzorcowe/strona wzorcowa/widoki częściowe

MVC ma pojęcie stronie głównego, poglądów i częściowym widokiem. Strona wzorcowa będzie wyglądać następująco:

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

mogę następnie utworzyć widok, że wypełnienie przestrzeni zidentyfikowane przez MainContent na stronie głównej.

Idąc przez samouczek wiki Pyramid here widzę autor powtarza się znacznie od tej samej treści w każdej z jego szablonów - treści, które normalnie byłyby zdefiniowane na stronie głównej - i całkowicie naruszone DRY.

Czy w Piramidzie istnieje pojęcie strony wzorcowej master page?

+1

Poza użytkownika @ SeanViera odpowiedź, przyjrzeć się tej odpowiedzi: http://stackoverflow.com/a/11025111/320021 - na przykład, w jaki sposób może przekazać szablon wzorcowy do widoku z Kameleonem. – Sergey

+0

Zaimplementowano dwie główne metody ponownego użycia kodu przez większość nowoczesnych silników szablonów: * jeden szablon może zawierać inne szablony lub fragmenty szablonów * jeden szablon może dziedziczyć z innego szablonu w celu zmiany lub rozszerzenia szablonu nadrzędnego –

Odpowiedz

15

Podobnie jak w przypadku MVC.NET Pyramid można używać dowolnej liczby języków szablonów - i prawie wszystkie z nich obsługują pojęcia podobne do stron wzorcowych. Żaden z nich wezwanie im, że choć ;-)

Chameleon jest prawdopodobnie najbardziej daleko tam - narzędzia, które są potrzebne do zdefiniowania szczelin w stronach wzorcowych ContentPlaceholder, etc.) są nazywane macros w Chameleon i określonych przez raczej ciężki akronim METAL (Macro Expansion Template Attribute Language).

W Jinja2 i Mako nazywane są blocks, a Breve nazywa je slots.

Oto co strona wzorcowa może wyglądać w każdym z nich:

Chameleon:

<!-- 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> 

Mako:

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

Breve:

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

Dzięki. Czytałem o makrach, ale z jakiegoś powodu myślałem, że zostały użyte do czegoś innego. Przyjrzę się im dalej. – ken

+4

+ Amillion za uwzględnienie w tekście przykładów języków szablonów. :-) –