"Олег Бройтман. Zope - The Object Publishing Environment" - читать интересную книгу автора

Еще есть класс Folder - папка. В ней хранятся другие объекты.
Пусть, скажем, Документ my.html начинается со стандартного заголовка, и
заканчивается стандартным подвалом. На языке DTML это выражается как
dtml-var standard_html_header> и dtml-var standard_html_footer>.
Разместим эти объекты на небольшом абстрактном (то есть существующим только
в наших головах) сайте. Пусть есть корень (корень в ZODB есть всегда), в
нем несколько папок, скажем, Razdel1 и Razdel2, 2 Метода - header и footer,
и в Razdel2 - наш my.html.
/
standard_html_header
standard_html_footer
Razdel1
Razdel2
my.html
Итак, браузер обращается к http://www.server/Razdel2/my.html. ZPublsiher
строит контекст [/, /Razdel2, /Razdel2/my.html] и вызывает рендеринг
my.html. Тот начинает рендерится, и в самом начале встречает
dtml-var standard_html_header>. Запрашивается значение заголовка. В
my.html такого объекта нет, в Razdel2 нет, поиск переходит в корень - там
такой есть. Он выполняется (рендерится), потом выполнение возвращается в
my.html, потом footer - все.
Возьмем и добавим в Razdel2 другой header:
/
standard_html_header
standard_html_footer
Razdel1
Razdel2
standard_html_header
my.html
И опять обратимся к http://www.server/Razdel2/my.html. Теперь my.html
позаимствует другой header, и выглядеть будет по-другому!
Добавим в корень новый раздел, с другими header/footer:
/
standard_html_header
standard_html_footer
Razdel1
Razdel2
standard_html_header
my.html
NewLook
standard_html_header
standard_html_header
И обратимся к http://www.server/Razdel2/NewLook/my.html. Будет ли
my.html использовать header из NewLook? Нет! my.html - DTML Document, и
всегда использует статический контекст. Его acquisition path всегда
[/, /Razdel2, /Razdel2/my.html].
Добавим в Razdel1 объект DTML Method index.html
/
standard_html_header
standard_html_footer