2012-06-29 22 views
9

Tengo experiencia con .NET MVC y deseo aprender un framework de Python. Elegí Pyramid.Pyramid Framework y plantillas maestras/página maestra/vistas parciales

.NET MVC tiene el concepto de una página maestra , vistas y vistas parciales. Una página maestra sería algo como:

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

Entonces puede crear una vistaque llenaría en el espacio identificado por MainContent en la página maestra.

El paso por la Pirámide wiki tutorial here, veo el autor ha repetido la mayor parte del mismo contenido en cada una de sus plantillas de contenido - que normalmente se define en una página maestra - y totalmente violado SECO.

¿Existe un concepto de página maestra en Pyramid?

+1

Además de la respuesta de @ SeanViera, echar un vistazo a esta respuesta: http://stackoverflow.com/a/11025111/320021 - para un ejemplo de cómo se puede pasar una plantilla maestra a una vista con Chameleon. – Sergey

+0

Hay dos métodos principales de reutilización de código implementados por la mayoría de los motores de plantillas modernos: * una plantilla puede incluir otras plantillas o fragmentos de plantillas * una plantilla puede heredar de otra plantilla para cambiar o ampliar la plantilla primaria –

Respuesta

15

Al igual que MVC.NET Pyramid puede usar cualquier número de lenguajes de plantillas, y casi todos admiten conceptos similares a las páginas maestras. Ninguno de ellos llamada ellas que aunque ;-)

Chameleon es probablemente el más lejos de allí - las herramientas que se utilizan para definir las ranuras en las páginas maestras ContentPlaceholder, etc.) se denominan en macros camaleón y referidos por el acrónimo bastante pesado METAL (Macro Expansion Template Attribute Language).

En Jinja2 y Mako se llaman blocks y Breve las llama slots.

Esto es lo que una página maestra podría ser similar en cada uno de ellos:

camaleón:

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

Gracias. Había leído sobre macros, pero por alguna razón pensé que se utilizarían para otra cosa. Los investigaré más a fondo. – ken

+4

+ amillion para incluir ejemplos para una gran cantidad de lenguajes de plantillas. :-) –

Cuestiones relacionadas