2012-06-29 9 views
9

Ich habe Erfahrung mit .NET MVC und möchte ein Python-Framework lernen. Ich habe Pyramid gewählt.Pyramid Framework und Master-Vorlagen/Masterseite/Teilansichten

.NET MVC hat das Konzept einer Masterseite, Ansichten und Teilansichten. Eine Master-Seite würde in etwa so aussehen:

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

dann kann ich erstellen Ansicht, die in dem Raum, der von MainContent in der Masterseite identifiziert füllen würden.

Geht man durch die Pyramide Wiki Anleitung here, sehe ich der Autor hat in jedem seiner Vorlagen viel von dem gleichen Inhalt wiederholt - Inhalte, die normalerweise in einer Masterseite definiert werden würde - und völlig DRY verletzt.

Gibt es ein Konzept einer Masterseite in Pyramid?

+1

Neben @ SeanViera Antwort, haben einen Blick auf diese Antwort: http://stackoverflow.com/a/11025111/320021 - für ein Beispiel, wie Sie kann mit Chameleon eine Mastervorlage an eine Ansicht übergeben. – Sergey

+0

Es gibt zwei wichtige Codewiederverwendungsmethoden, die von den meisten modernen Vorlagen-Engines implementiert werden: * eine Vorlage kann andere Vorlagen oder Vorlagenfragmente enthalten * eine Vorlage kann von einer anderen Vorlage erben, um die übergeordnete Vorlage zu ändern oder zu erweitern –

Antwort

15

Genau wie MVC.NET kann Pyramid eine beliebige Anzahl von Templating-Sprachen verwenden - und fast alle davon unterstützen Konzepte, die Masterseiten ähneln. Keiner von ihnen Anruf sie, dass, obwohl ;-)

Chameleon ist wahrscheinlich die am weitesten draußen - die Werkzeuge, die Sie Slots in Masterseiten zu definieren verwenden, um ContentPlaceholder, etc.) macros in Chameleon genannt und bezeichnet durch das ziemlich schwere Akronym METAL (Macro Expansion Template Attribute Language). In Jinja2 und Mako heißen sie blocks und Breve nennt sie slots. Hier

ist, was eine Masterseite wie von ihnen in jeder aussehen könnte:

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

Danke. Ich hatte über Makros gelesen, aber aus irgendeinem Grund dachte ich, dass sie für etwas anderes verwendet wurden. Ich werde weiter nachsehen. – ken

+4

+ Millionen für die Aufnahme von Beispielen für viele Templating-Sprachen. :-) –

Verwandte Themen