Layouts in Express 3 and EJS Layouts in Express 3 and EJS express express

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:

https://stackoverflow.com/a/12477536/446681