npm install express-ejs-layouts
var express = require('express')
, app = express()
, expressLayouts = require('express-ejs-layouts')
app.set('view engine', 'ejs')
app.set('layout', 'myLayout') // defaults to 'layout'
app.use(expressLayouts)
app.use(app.router)
app.get('/', function(req, res){
res.render('aView', { layout: 'someSpecificLayout' })
})
app.listen(3000)
A view
somebody
<%- contentFor('foo') %>
club
<%- contentFor('bar') %>
fight
With a layout
<%-bar%> <%-foo%>
<%-body%>
Renders
fight club
somebody
If you like to place all the script blocks at the end, you can do it like this:
app.set("layout extractScripts", true)
A view
something<script>somejs<script>something
With a layout
...
<body>
<%- body %>
<%- script %>
</body>
Renders
...
<body>
somethingsomething
<script>somejs<script>
</body>
Enabling invididually:
req.render('view', { parseScript: true })
In a layout, you can have optional sections using defineContent
:
Unspecified section content defaults to ''
.
1
<%-defineContent('a')%>
2
<%-defineContent('b')%>
3
with a view:
<%- contentFor('a') %>
1.5
will render:
1
1.5
2
3
Clone the rep
make test
MIT