TurboGears - включает
Содержимое другого XML-документа (особенно HTML-документа) можно включить с помощью тегов включения в текущий документ. Чтобы включить такое включение, пространство имен XInclude должно быть объявлено в корневом элементе документа HTML.
<html xmlns = "http://www.w3.org/1999/xhtml" xmlns:xi = "http://www.w3.org/2001/XInclude >
Приведенное выше объявление указывает, что директива include содержит ‘xi’приставка. Чтобы добавить содержимое другой html-страницы в текущий документ, используйте директиву xi: include следующим образом:
<xi:include href = "somepage.html" />
В следующем примере root.py содержит контроллер include (), который предоставляет include.html.
from hello.lib.base import BaseController
from tg import expose, request
class RootController(BaseController):
@expose('hello.templates.include')
def include(self):
return {}
HTML-код заголовка и нижнего колонтитула
В include.html объявляется пространство имен include и добавляется содержимое heading.html и footer.html. Вот HTML-сценарий templates \ include.html -
<html xmlns = "http://www.w3.org/1999/xhtml"
xmlns:xi = "http://www.w3.org/2001/XInclude">
<head>
<title>TurboGears Templating Example</title>
</head>
<body>
<xi:include href = "heading.html" />
<h2>main content </h2>
<xi:include href = "footer.html" />
</body>
</html>
Вот код templates \ heading.html -
<html>
<head>
<title>TurboGears Templating Example</title>
</head>
<body>
<h1>This is page Header</h1>
</body>
</html>
Ниже приведены шаблоны \ footer.html
<html>
<head>
<title>TurboGears Templating Example</title>
</head>
<body>
<h3>This is page footer</h3>
</body>
</html>
Запустите разработку с помощью коробки передач и введите http://localhost:8080/includeв браузере. Результат рендеринга будет таким, как показано ниже -
Таким образом может быть достигнута модульная конструкция видов. Если ресурс, указанный в директиве xi: include, недоступен, возникает ошибка. В таком случае можно загрузить альтернативный ресурс с помощью xi: fallback.
<xi:include href = “main.html”>
<xi:fallback href = ”default.html”/>
</xi.include>
Включение контента можно сделать динамическим как атрибут href, который может содержать выражения.
Добавьте следующий контроллер в root.py.
@expose('hello.templates.ref-include')
def refinclude(self):
return {'pages':['heading','main','footer']}
Сохраните следующий код как ref-include.html в папке шаблонов.
<html xmlns = "http://www.w3.org/1999/xhtml"
xmlns:py = "http://genshi.edgewall.org/"
xmlns:xi = "http://www.w3.org/2001/XInclude">
<head>
<title>TurboGears Templating Example</title>
</head>
<body>
<xi:include href = "${name}.html" py:for = "name in pages" />
</body>
</html>
Перед запуском сервера убедитесь, что в папке шаблонов есть заголовки.html, main.html и footer.html. Войтиhttp://localhost:8082/refinclude в браузере, чтобы получить следующий результат