TurboGears - Incluye
El contenido de otro documento XML (especialmente el documento HTML) se puede incluir utilizando etiquetas de inclusión en el documento actual. Para habilitar dicha inclusión, el espacio de nombres XInclude debe declararse en el elemento raíz del documento HTML.
<html xmlns = "http://www.w3.org/1999/xhtml" xmlns:xi = "http://www.w3.org/2001/XInclude >
La declaración anterior especifica que la directiva include contiene ‘xi’prefijo. Para agregar contenido de otra página html en el documento actual, use la directiva xi: include de la siguiente manera:
<xi:include href = "somepage.html" />
En el siguiente ejemplo, root.py contiene el controlador include (), que expone 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 de encabezado y pie de página
En include.html, se declara el espacio de nombres de inclusión y se agregan los contenidos de header.html y footer.html. Aquí está el 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>
Aquí está el código templates \ header.html -
<html>
<head>
<title>TurboGears Templating Example</title>
</head>
<body>
<h1>This is page Header</h1>
</body>
</html>
Las siguientes son las plantillas \ footer.html
<html>
<head>
<title>TurboGears Templating Example</title>
</head>
<body>
<h3>This is page footer</h3>
</body>
</html>
Inicie el desarrollo usando una caja de cambios y entre http://localhost:8080/includeen el navegador. La salida renderizada será como se muestra a continuación:
De esta manera se puede lograr la construcción modular de vistas. Si el recurso mencionado en la directiva xi: include no está disponible, se generará un error. En tal caso, se puede cargar un recurso alternativo utilizando xi: fallback.
<xi:include href = “main.html”>
<xi:fallback href = ”default.html”/>
</xi.include>
La inclusión de contenido se puede hacer dinámica como atributo href que puede contener expresiones.
Agregue el siguiente controlador en root.py.
@expose('hello.templates.ref-include')
def refinclude(self):
return {'pages':['heading','main','footer']}
Guarde el siguiente código como ref-include.html en la carpeta de plantillas.
<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>
Antes de iniciar el servidor, asegúrese de que la carpeta de plantillas tenga un header.html, main.html y footer.html. Entrarhttp://localhost:8082/refinclude en el navegador para obtener el siguiente resultado