TurboGears - Modèles de service

Un événement via le contenu HTML peut être renvoyé au navigateur, pour une sortie plus avancée, l'utilisation du moteur de modèle est toujours préférée. Dans un projet full stack «quickstarted» par gearbox, Genshi est activé comme moteur de rendu de modèle par défaut. Dans une application minimale, cependant, Genshi (ou tout autre moteur de modèle, tel que jinja) doit être installé et activé. Le moteur de modèle Genshi permet d'écrire des modèles en xhtml pur et de les valider pour détecter les problèmes au moment de la compilation et éviter de servir des pages cassées.

Les modèles sont référencés en utilisant une notation pointée. Dans notre projet Hello, un répertoire de modèles est fourni pour stocker les pages Web de modèles. Par conséquentsample.html sera dénommé hello.templates.sample(extension non mentionnée). TurboGears rend ce modèle via un décorateur d'exposition pour lui lier la méthode du contrôleur entg.render_template() fonction.

La fonction de contrôleur exposée renvoie un objet dictionnaire Python. Cet objet dictionnaire est à son tour transmis au modèle lié. Les espaces réservés dans le modèle sont remplis avec des valeurs de dictionnaire.

Pour commencer, nous allons afficher une page Web avec un script html simple. Le contrôleur exposé renvoie unnull dictionary object car nous n'avons pas l'intention d'envoyer des données à analyser dans le script HTML.

Comment créer un exemple de HTML

Notre sample.htmlest donnée ci-dessous. Assurez-vous qu'il est stocké dans le répertoire des modèles du projet.

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

Ajouter sample() fonction dans root.py et exposez sample.html à travers.

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

Le résultat suivant sera affiché dans le navigateur lorsqu'une URL http://localhost:8080/sample est entré après le démarrage du serveur Web.

Comme mentionné ci-dessus, un objet dictionnaire est envoyé en tant que collection de paramètres à un modèle Genshi. Ce modèle contient des «espaces réservés», qui sont remplis dynamiquement avec les paramètres reçus du contrôleur.

Changeons le sample() pour envoyer un objet dictionnaire à l'exemple de modèle.

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

Créer sample.html dans le dossier des modèles (templates\sample.html)

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

Dans le code HTML ci-dessus, ${person}est l'espace réservé. Entrerhttp://localhost:8080/sample?name=MVLcomme URL dans le navigateur. Cette URL est mappée àsample()méthode dans notre contrôleur racine. Il renvoie un objet dictionnaire. Ceci est sélectionné par la page de modèle liée sample.html dans le répertoire des modèles. Le $ {person} est alors remplacé par MVL dans la page Web.

Il est également possible d'accéder aux données du formulaire HTML dans une fonction de contrôleur. Le formulaire HTML utilise pour envoyer les données du formulaire.