Ci sono diversi approcci, da un lato, usando template dal lato server come Smarty, Twig, ecc. Non consiglio questo approccio perché stai accoppiando il tuo codice di presentazione alla tecnologia usata nel server (come php , pitone, rubino, java, ...).
L'altro approccio consiste nell'utilizzare modelli / framework per client per la vista (come ember, angularjs, backbone, ...). Raccomando questo approccio a causa della separazione delle preoccupazioni tra view (html, css, js ...) e codice o controller del server (php / symphony, python / django, ruby / rails, java / spring ...).
Quindi tra il codice server e il codice cliente, la colla uniq che devi inserire è l'oggetto modello in formato Json (o qualsiasi altro formato tu abbia bisogno). In questo modo, è possibile sviluppare codice nella vista che è riutilizzabile da qualsiasi tipo di codice server e, quindi, è possibile sviluppare la logica dell'applicazione con tecnologie server diverse.