TurboGears - Inclui
O conteúdo de outro documento XML (especialmente documento HTML) pode ser incluído usando tags de inclusão no documento atual. Para permitir tal inclusão, o namespace XInclude deve ser declarado no elemento raiz do documento HTML.
<html xmlns = "http://www.w3.org/1999/xhtml" xmlns:xi = "http://www.w3.org/2001/XInclude >
A declaração acima especifica que a diretiva include contém ‘xi’prefixo. Para adicionar conteúdo de outra página html no documento atual, use a diretiva xi: include da seguinte maneira -
<xi:include href = "somepage.html" />
No exemplo a seguir, root.py contém o controlador include (), que expõe 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 cabeçalho e rodapé
Em include.html, o namespace include é declarado e os conteúdos de header.html e footer.html são adicionados. Aqui está o 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>
Aqui está o código templates \ header.html -
<html>
<head>
<title>TurboGears Templating Example</title>
</head>
<body>
<h1>This is page Header</h1>
</body>
</html>
A seguir está o template \ footer.html
<html>
<head>
<title>TurboGears Templating Example</title>
</head>
<body>
<h3>This is page footer</h3>
</body>
</html>
Comece o desenvolvimento usando uma caixa de engrenagens e entre http://localhost:8080/includeno navegador. A saída renderizada será como mostrado abaixo -
Desta forma, a construção modular das vistas pode ser alcançada. Se o recurso mencionado na diretiva xi: include não estiver disponível, um erro será gerado. Nesse caso, um recurso alternativo pode ser carregado usando xi: fallback.
<xi:include href = “main.html”>
<xi:fallback href = ”default.html”/>
</xi.include>
A inclusão de conteúdo pode ser tornada dinâmica como um atributo href que pode conter expressões.
Adicione o seguinte controlador em root.py.
@expose('hello.templates.ref-include')
def refinclude(self):
return {'pages':['heading','main','footer']}
Salve o código a seguir como ref-include.html na pasta de modelos.
<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 o servidor, certifique-se de que a pasta de modelos tenha um header.html, main.html e footer.html Entrarhttp://localhost:8082/refinclude no navegador para obter o seguinte resultado