Учебники

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-скрипт шаблонов \ 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>

Вот код шаблонов \ 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>

Перед запуском сервера убедитесь, что в папке templates находятся heading.html, main.html и footer.html. Введите http: // localhost: 8082 / refinclude в браузере, чтобы получить следующий вывод