L’articolo di oggi voglio dedicarlo agli studenti come me. In questi ultimi giorni sono stato impegnatissimo con un esame che mi ha portato via veramente tanti capelli, ma allo stesso tempo mi ha dato grandi soddisfazioni, sia nel voto sia in come è venuto il progetto. Il corso si tratta di Applicazioni Web e il progetto riguarda un applicazione realizzata in Ruby.
Una parte molto importante dell’applicazione è quella che va a stampare l’output del problema. Il procedimento è standard e prende il nome di renderizzazione del template. Come funziona? Un’applicazione dinamica è costituita da una serie di classi, una di queste si chiama Controller (nel modello più usato, ovvero il Model View Controller) ed ha il compito di smistare i compiti dell’applicazione, in base al path inserito: ad esempio /applicazione/liste/nuova avrà un comportamento, mentre /applicazione/liste/mostra ne avrà un altro.
Ognuno di questi compiti, se necessario, dovrà mostrare una pagina creata dinamicamente in base a determinate variabili (es. stampa di tutti gli utenti registrati al forum), richiamando un file .erb. Andiamo a vedere il codice che,ripeto, è standard.
La classe template deve contenere due metodi
1: class Template
2: def initialize(path)
3: File.open(path, "r") do |riga|
4: @contenuto = riga.read
5: end
6: end
7:
8: def expand(variabili)
9: ERB.new(@contenuto).result.variables
10: end
11: end
che andranno a prendere il template al percorso path e lo visualizzeranno. La chiamata di questo metodo è più elaborata e dipende dall’applicazione, in genere nel Controller troveremo un metodo
1: def render(template_name)
2: template = Template.new(template_name)
3: @response.write_html template.expand(binding)
4: end
dove @response è un oggetto della classe adibita alla risposta (stampa dell’output) e write_html un suo metodo per combinare la stampa di header HTTP e body. Nel caso abbiate bisogno di ulteriori dettagli lasciate pure un commento ![]()
Non sembra ci siano articoli affini.
Loading ...

0 Responses to “Renderizzare un template in Ruby”