jade template engine, how to use layout.jade?


Question

I have a website in node.js; to create a page, say mypage I noticed I need to create both a layout.jade and mypage.jade files. If I put code in mypage.jade it is not displayed, so first I have to fill layout.jade with the layout of the page.

My question is, how do I reference inside layout.jade that I would like to load the content of mypage.jade in a certain container, for example? Can I have different pages with the same layout? How can I do this?

Thanks

1
18
12/6/2011 4:20:44 PM

Accepted Answer

http://expressjs.com/guide.html#view-rendering

If you don't want to use layouts you can disable them globally:

app.set('view options', {
  layout: false
});

If you don't do that layouts are enabled by default and Express searches for the standard layout in your_view_folder/layout.jade

You can specify a separate layout for each route though:

res.render('page', { layout: 'mylayout.jade' }); 
// you can omit .jade if you set the view engine to jade

Here's how your layout file could be:

doctype html
html(lang="en")
  head
    title Testing 123
  body
    div!= body

Note that body will be taken from "mypage.jade".

Edit:

Here's a real example in an application:

The application file (containing routes and configs):
https://github.com/alexyoung/nodepad/blob/master/app.js

The layout file:
https://github.com/alexyoung/nodepad/blob/master/views/layout.jade

30
2/12/2016 2:44:16 PM

A little late to the party but I struggled to find the answer initially... In layout.jade

doctype html
html(lang="en")
    head
    body
        h1 Hello World
        block myblock

Then in index.jade

extends layout
    block myblock
        p Jade is cool

Will render

<!DOCTYPE html>
<html lang="en">
<head>
<body>
    <h1>Hello World</h1>
    <p>Jade is cool</p>
</body>
</html>

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon