TurboGears - Serving Templates
Un evento sebbene il contenuto HTML possa essere restituito al browser, per un output più avanzato, è sempre preferibile l'uso del motore del modello. In un progetto full stack "avviato rapidamente" da gearbox, Genshi è abilitato come renderer di modelli predefinito. In un'applicazione minima, tuttavia, Genshi (o qualsiasi altro motore di modelli, come jinja) deve essere installato e abilitato. Il motore di modelli Genshi consente di scrivere modelli in puro xhtml e li convalida per rilevare problemi in fase di compilazione e prevenire la pubblicazione di pagine interrotte.
I modelli vengono indicati utilizzando una notazione puntata. Nel nostro progetto Hello viene fornita una directory dei modelli per memorizzare le pagine web dei modelli. Quindisample.html sarà indicato come hello.templates.sample(estensione non menzionata). TurboGears esegue il rendering di questo modello tramite un decoratore di esposizione per collegare il metodo del controller ad esso tramitetg.render_template() funzione.
La funzione controller esposta restituisce un oggetto dizionario Python. Questo oggetto dizionario viene a sua volta passato al modello collegato. I segnaposto nel modello vengono riempiti con i valori del dizionario.
Per cominciare, mostriamo una pagina web con un semplice script html. Il controller esposto restituisce un filenull dictionary object poiché non intendiamo inviare alcun dato da analizzare all'interno dello script HTML.
Come creare un codice HTML di esempio
Nostro sample.htmlè dato di seguito. Assicurati che sia archiviato nella directory dei modelli del progetto.
<html>
<head>
<title>TurboGears Templating Example</title>
</head>
<body>
<h2>Hello, Welcome to TurboGears!.</h2>
</body>
</html>
Inserisci sample() funzione in root.py ed esponi sample.html attraverso di esso.
@expose("hello.templates.sample")
def sample(self):
return {}
Il seguente risultato verrà visualizzato nel browser quando un URL http://localhost:8080/sample viene inserito dopo aver avviato il server web.
Come accennato in precedenza, un oggetto dizionario viene inviato come raccolta di parametri a un modello Genshi. Questo modello contiene "segnaposto", che vengono riempiti dinamicamente con i parametri ricevuti dal controller.
Cambiamo il file sample() funzione per inviare un oggetto dizionario al modello di esempio.
@expose("hello.templates.sample")
def sample(self,name):
mydata = {'person':name}
return mydata
Creare sample.html nella cartella dei modelli (templates\sample.html)
<html>
<head>
<title>TurboGears Templating Example</title>
</head>
<body>
<h2>Hello, my name is ${person}!.</h2>
</body>
</html>
Nel codice HTML sopra, ${person}è il segnaposto. accederehttp://localhost:8080/sample?name=MVLcome URL nel browser. Questo URL è associato asample()metodo nel nostro controller di root. Restituisce un oggetto dizionario. Viene selezionato dalla pagina del modello collegata sample.html nella directory dei modelli. La $ {person} viene quindi sostituita da MVL nella pagina web.
È anche possibile accedere ai dati del modulo HTML in una funzione del controller. Il modulo HTML utilizza per inviare i dati del modulo.