Каркас пирамиды и главные шаблоны / главная страница / частичные представления

У меня есть опыт работы с.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")
    ]
]
Другие вопросы по тегам