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