TurboGears - Include

Il contenuto di un altro documento XML (in particolare il documento HTML) può essere incluso utilizzando i tag di inclusione nel documento corrente. Per abilitare tale inclusione, lo spazio dei nomi XInclude deve essere dichiarato nell'elemento radice del documento HTML.

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

La dichiarazione precedente specifica che la direttiva include contiene ‘xi’prefisso. Per aggiungere il contenuto di un'altra pagina html nel documento corrente, usa la direttiva xi: include come segue:

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

Nell'esempio seguente, root.py contiene il controller include (), che espone include.html.

from hello.lib.base import BaseController
from tg import expose, request

class RootController(BaseController):
   @expose('hello.templates.include')
   def include(self):
      return {}

Intestazione e piè di pagina HTML

In include.html, viene dichiarato lo spazio dei nomi include e vengono aggiunti i contenuti di header.html e footer.html. Ecco lo script HTML di 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>

Ecco il codice dei modelli \ intestazione.html -

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

Quello che segue è il template \ footer.html

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

Avvia lo sviluppo utilizzando un riduttore ed entra http://localhost:8080/includenel browser. L'output renderizzato sarà come mostrato di seguito:

In questo modo è possibile ottenere la costruzione modulare delle viste. Se la risorsa menzionata nella direttiva xi: include non è disponibile, verrà generato un errore. In tal caso, è possibile caricare una risorsa alternativa utilizzando xi: fallback.

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

L'inclusione del contenuto può essere dinamizzata come attributo href che può contenere espressioni.

Aggiungi il seguente controller in root.py.

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

Salva il codice seguente come ref-include.html nella cartella dei modelli.

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

Prima di avviare il server assicurati che la cartella dei modelli abbia un header.html, main.html e footer.html. accederehttp://localhost:8082/refinclude nel browser per ottenere il seguente output