Node.js - EJS - including a partial

node.jsEjs

node.js Problem Overview


I am trying to use Embedded Javascript renderer for node: https://github.com/visionmedia/ejs

I would like to know how I can include another view file (partial) inside a .ejs view file.

node.js Solutions


Solution 1 - node.js

With Express 3.0:

<%- include myview.ejs %>

the path is relative from the caller who includes the file, not from the views directory set with app.set("views", "path/to/views").

EJS v1 includes
EJS v2 includes

(Update: the newest syntax for ejs v3.0.1 is <%- include('myview.ejs') %>)

Solution 2 - node.js

> Works with Express 4.x :

The Correct way to include partials in the template according to this you should use:

<%- include('partials/youFileName.ejs') %>.

You are using:

<% include partials/yourFileName.ejs %>

which is deprecated.

Solution 3 - node.js

In Express 4.x I used the following to load ejs:

  var path = require('path');

  // Set the default templating engine to ejs
  app.set('view engine', 'ejs');
  app.set('views', path.join(__dirname, 'views'));

  // The views/index.ejs exists in the app directory
  app.get('/hello', function (req, res) {
    res.render('index', {title: 'title'});
  });

Then you just need two files to make it work - views/index.ejs:

<%- include partials/navigation.ejs %>

And the views/partials/navigation.ejs:

<ul><li class="active">...</li>...</ul>

You can also tell Express to use ejs for html templates:

var path = require('path');
var EJS  = require('ejs');

app.engine('html', EJS.renderFile);

// Set the default templating engine to ejs
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));

// The views/index.html exists in the app directory
app.get('/hello', function (req, res) {
  res.render('index.html', {title: 'title'});
});

Finally you can also use the ejs layout module:

var EJSLayout = require('express-ejs-layouts');
app.use(EJSLayout);

This will use the views/layout.ejs as your layout.

Solution 4 - node.js

As of Express 4.x

app.js

// above is all your node requires

// view engine setup
app.set('views', path.join(__dirname, 'views')); <-- ./views has all your .ejs files
app.set('view engine', 'ejs');

error.ejs

<!-- because ejs knows your root directory for views, you can navigate to the ./base directory and select the header.ejs file and include it -->

<% include ./base/header %> 
<h1> Other mark up here </h1>
<% include ./base/footer %>

Solution 5 - node.js

Express 3.x no longer support partial. According to the post https://stackoverflow.com/questions/11351691/ejs-partial-is-not-defined, you can use "include" keyword in EJS to replace the removed partial functionality.

Solution 6 - node.js

app.js add

app.set('view engine','ejs')

add your partial file(ejs) in views/partials

in index.ejs

<%- include('partials/header.ejs') %>

Solution 7 - node.js

In oficial documentation https://github.com/mde/ejs#includes show that includes works like that:

<%- include('../partials/head') %>

Solution 8 - node.js

Also

<%- include('partials/header.ejs',{paramName: paramValue}) %>

Solution 9 - node.js

    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.3/css/bootstrap.min.css" integrity="sha384-Zug+QiDoJOrZ5t4lssLdxGhVrurbmBWopoEl+M6BdEfwnCJZtKxi1KgxUyJq13dy" crossorigin="anonymous">

 <form method="post" class="mt-3">
        <div class="form-group col-md-4">
          <input type="text" class="form-control form-control-lg" id="plantName" name="plantName" placeholder="plantName">
        </div>
        <div class="form-group col-md-4">
          <input type="text" class="form-control form-control-lg" id="price" name="price" placeholder="price">
        </div>
        <div class="form-group col-md-4">
            <input type="text" class="form-control form-control-lg" id="harvestTime" name="harvestTime" placeholder="time to harvest">
          </div>
        <button type="submit" class="btn btn-primary btn-lg col-md-4">Submit</button>
      </form>

<form method="post">
        <table class="table table-striped table-responsive-md">
            <thead>
            <tr>
                <th scope="col">Id</th>
                <th scope="col">FarmName</th>
                <th scope="col">Player Name</th>
                <th scope="col">Birthday Date</th>
                <th scope="col">Money</th>
                <th scope="col">Day Played</th>
                <th scope="col">Actions</th>
            </tr>
            </thead>
            <tbody>
            <%for (let i = 0; i < farms.length; i++) {%>
                 <tr>
                    <td><%= farms[i]['id'] %></td>
                    <td><%= farms[i]['farmName'] %></td>
                    <td><%= farms[i]['playerName'] %></td>
                    <td><%= farms[i]['birthDayDate'] %></td>
                    <td><%= farms[i]['money'] %></td>
                    <td><%= farms[i]['dayPlayed'] %></td>
                    <td><a href="<%=`/farms/${farms[i]['id']}`%>">Look at Farm</a></td>
                </tr>
            <%}%>
        </table>
    </form>

Solution 10 - node.js

For including ejs file you must use:

<%- include("file-name") %>

Note: NO need to use .ejs in file name.

Solution 11 - node.js

For including ejs file you must use:

<%- include("relative path of ejs ") -%>

Solution 12 - node.js

Nothing to Worry It's Very Simple Only Follow the Below Step

  1. <%- include("partials/header") -%> //for header.ejs
  2. This EJS Body Content
  3. <%=abt%>
  4. <%-include("partials/footer") -%> //for footer.ejs

Solution 13 - node.js

EJS by itself currently does not allow view partials. Express does.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionjeffreyveonView Question on Stackoverflow
Solution 1 - node.jsPhilipp KyeckView Answer on Stackoverflow
Solution 2 - node.jsasapxj07View Answer on Stackoverflow
Solution 3 - node.jsczeraszView Answer on Stackoverflow
Solution 4 - node.jsDaniel RamView Answer on Stackoverflow
Solution 5 - node.jsVCDView Answer on Stackoverflow
Solution 6 - node.jsVardhman JainView Answer on Stackoverflow
Solution 7 - node.jsClairton LuzView Answer on Stackoverflow
Solution 8 - node.jscaglarorView Answer on Stackoverflow
Solution 9 - node.jsEnividu IndonesiaView Answer on Stackoverflow
Solution 10 - node.jsAbhinav SinghView Answer on Stackoverflow
Solution 11 - node.jsrahul majhiView Answer on Stackoverflow
Solution 12 - node.jsDikshit kumarView Answer on Stackoverflow
Solution 13 - node.jsjeffreyveonView Answer on Stackoverflow