Каркас пирамиды и главные шаблоны / главная страница / частичные представления
У меня есть опыт работы с.NET MVC, и я хочу изучать Python Framework. Я выбрал Пирамиду.
.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
на главной странице.
Проходя здесь вики-руководство по Pyramid, я вижу, что автор повторял большую часть одного и того же контента в каждом из своих шаблонов - контента, который обычно определяется на главной странице - и полностью нарушал DRY.
Есть ли концепция главной страницы в пирамиде?
1 ответ
Так же, как MVC.NET Pyramid может использовать любое количество языков шаблонов - и почти все они поддерживают концепции, аналогичные основным страницам. Никто из них так их не называет;-)
Хамелеон, пожалуй, самый дальний - инструменты, которые вы используете для определения слотов на главных страницах ContentPlaceholder
и т. д.) называются macros
в хамелеоне и упоминается довольно тяжелой аббревиатурой METAL
Язык атрибутов шаблона расширения макроса.
В Джинджа2 и Мако они называются 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>
Джинджа2:
<!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>
Breve:
html [
head [
title [ slot("title") ]
]
body [
slot("content")
]
]