Layouts in Express 3 and EJS
I struggled with this as well. So I put up a github project with an example for ejs and dustjs.
https://github.com/chovy/express-template-demo
I'm not sure the difference between a partial and an include, you don't need to explicitly pass data to an include. Not sure why you would want a partial.
But for a layout, you just specify a block like this:
//layout.ejs<html><%- body %></html>//page1.ejs<% layout('layout') -%>This is loaded from page 1 and overrides <%- body %> in the layout.ejs.
If anyone wants to add more examples, just submit a pull request.
It seems that from Express 3, layout feature is delegated to the responsibility of template engines. You can use ejs-locals (https://github.com/RandomEtc/ejs-locals) for layout.
Install ejs-locals
npm install ejs-locals --save
Use ejs-locals as your app engine in app.js
var express = require('express');var engine = require('ejs-locals');...app.engine('ejs', engine);app.set('view engine', 'ejs');
Now you can use layout
layout.ejs<body> <%- body %></body>index.ejs<% layout('layout') -%><div class="container"><div class="jumbotron">...
Another option is to use express-partials (https://github.com/publicclass/express-partials). The two do the same thing, so it's just your choice.
You can mimic the EJS layouts in Express 2.x with the "include" option. See my answer here: