TurboGears - Modelos de veiculação

Um evento embora o conteúdo HTML possa ser retornado ao navegador, para uma saída mais avançada, o uso do mecanismo de modelo é sempre preferido. Em um projeto full stack 'iniciado rapidamente' pela caixa de engrenagens, Genshi é habilitado como o renderizador de template padrão. Em um aplicativo mínimo, no entanto, o Genshi (ou qualquer outro mecanismo de modelo, como o jinja) precisa ser instalado e ativado. O mecanismo de template Genshi permite escrever templates em xhtml puro e valida-os para detectar problemas em tempo de compilação e prevenir o serviço de páginas quebradas.

Os modelos são referidos usando uma notação pontilhada. Em nosso projeto Hello, um diretório de modelos é fornecido para armazenar páginas da web de modelo. Conseqüentementesample.html será referido como hello.templates.sample(extensão não mencionada). O TurboGears renderiza este modelo por meio de um decorador de exposição para vincular o método do controlador a ele portg.render_template() função.

A função do controlador exposta retorna um objeto de dicionário Python. Este objeto de dicionário, por sua vez, é passado para o modelo vinculado. Os marcadores de posição no modelo são preenchidos com valores de dicionário.

Para começar, vamos exibir uma página da web com script html simples. O controlador exposto retorna umnull dictionary object já que não pretendemos enviar nenhum dado para ser analisado dentro do script HTML.

Como criar um exemplo de HTML

Nosso sample.htmlé fornecido abaixo. Certifique-se de que ele esteja armazenado no diretório de modelos do projeto.

<html>
   <head>
      <title>TurboGears Templating Example</title>
   </head>
	
   <body>
      <h2>Hello, Welcome to TurboGears!.</h2>
   </body>
</html>

Adicionar sample() função em root.py e expor sample.html por meio dele.

@expose("hello.templates.sample")
   def sample(self):
      return {}

O seguinte resultado será exibido no navegador quando um URL http://localhost:8080/sample é inserido após iniciar o servidor da web.

Conforme mencionado acima, um objeto de dicionário é enviado como uma coleção de parâmetros para um modelo Genshi. Este modelo contém 'marcadores', que são preenchidos dinamicamente com os parâmetros recebidos do controlador.

Vamos mudar o sample() função para enviar um objeto de dicionário para o modelo de amostra.

@expose("hello.templates.sample")
   def sample(self,name):
      mydata = {'person':name}
      return mydata

Crio sample.html na pasta de modelos (templates\sample.html)

<html>
   <head>
      <title>TurboGears Templating Example</title>
   </head>
	
   <body>
      <h2>Hello, my name is ${person}!.</h2>
   </body>
</html>

No código HTML acima, ${person}é o espaço reservado. Entrarhttp://localhost:8080/sample?name=MVLcomo URL no navegador. Este URL está mapeado parasample()método em nosso controlador raiz. Ele retorna um objeto de dicionário. Isso é escolhido pela página de modelo vinculada sample.html no diretório de modelos. O $ {person} é então substituído por MVL na página da web.

Também é possível acessar os dados do formulário HTML em uma função de controlador. O formulário HTML usa para enviar dados do formulário.