TurboGears - Comprend

Le contenu d'un autre document XML (en particulier le document HTML) peut être inclus en utilisant des balises d'inclusion dans le document actuel. Afin d'activer une telle inclusion, l'espace de noms XInclude doit être déclaré dans l'élément racine du document HTML.

<html xmlns = "http://www.w3.org/1999/xhtml" xmlns:xi = "http://www.w3.org/2001/XInclude >

La déclaration ci-dessus spécifie que la directive include contient ‘xi’préfixe. Pour ajouter le contenu d'une autre page html dans le document actuel, utilisez la directive xi: include comme suit -

<xi:include href = "somepage.html" />

Dans l'exemple suivant, root.py contient le contrôleur include (), qui expose 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 d'en-tête et de pied de page

Dans include.html, un espace de noms d'inclusion est déclaré et le contenu de header.html et footer.html est ajouté. Voici le script HTML de 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>

Voici le code templates \ header.html -

<html>
   <head>
      <title>TurboGears Templating Example</title>
   </head>
	
   <body>
      <h1>This is page Header</h1>
   </body>
</html>

Ce qui suit est le templates \ footer.html

<html>
   <head>
      <title>TurboGears Templating Example</title>
   </head>
	
   <body>
      <h3>This is page footer</h3>
   </body>
</html>

Démarrez le développement à l'aide d'une boîte de vitesses et entrez http://localhost:8080/includedans le navigateur. La sortie rendue sera comme indiqué ci-dessous -

De cette façon, la construction modulaire des vues peut être réalisée. Si la ressource mentionnée dans la directive xi: include n'est pas disponible, une erreur sera générée. Dans ce cas, une ressource alternative peut être chargée en utilisant xi: fallback.

<xi:include href = “main.html”>
   <xi:fallback href = ”default.html”/>
</xi.include>

L'inclusion de contenu peut être rendue dynamique en tant qu'attribut href pouvant contenir des expressions.

Ajoutez le contrôleur suivant dans root.py.

@expose('hello.templates.ref-include')
   def refinclude(self):
      return {'pages':['heading','main','footer']}

Enregistrez le code suivant sous le nom ref-include.html dans le dossier des modèles.

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

Avant de démarrer le serveur, assurez-vous que le dossier des modèles a un titre.html, main.html et footer.html. Entrerhttp://localhost:8082/refinclude dans le navigateur pour obtenir la sortie suivante