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

У меня есть опыт работы с .NET MVC, и я хочу изучить среду Python. Я выбрал Пирамиду.

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

Есть ли в Pyramid концепция главной страницы?


person ken    schedule 29.06.2012    source источник
comment
В дополнение к ответу @ SeanViera взгляните на этот ответ: stackoverflow.com/a/11025111/320021 - для пример того, как вы можете передать главный шаблон в представление с помощью Chameleon.   -  person Sergey    schedule 30.06.2012
comment
В большинстве современных шаблонизаторов реализованы два основных метода повторного использования кода: * один шаблон может включать в себя другие шаблоны или фрагменты шаблонов * один шаблон может наследовать от другого шаблона, чтобы изменить или расширить родительский шаблон   -  person Alex K    schedule 31.05.2013


Ответы (1)


Точно так же, как MVC.NET Pyramid может использовать любое количество языков шаблонов - и почти все они поддерживают концепции, аналогичные эталонным страницам. Никто из них не называет их так ;-)

Chameleon, вероятно, самый дальний из них - инструменты, которые вы используете для определения слотов на мастер-страницах ContentPlaceholder и т. Д.), Называются macros в Chameleon и обозначаются довольно тяжелым акронимом _ 3_ (Язык атрибутов шаблона расширения макросов).

В Jinja2 и Mako они называются 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>

Jinja2:

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

Бреве:

html [
    head [
        title [ slot("title") ]
    ]
    body [
       slot("content")
    ]
]
person Sean Vieira    schedule 29.06.2012
comment
Спасибо. Я читал о макросах, но почему-то подумал, что они используются для чего-то другого. Я изучу их дальше. - person ken; 29.06.2012
comment
+ миллион за включение примеров для множества языков шаблонов. :-) - person Martijn Pieters; 29.06.2012