Node.js-EJS-包括部分


73

我正在尝试将嵌入式Javascript渲染器用于节点:https : //github.com/visionmedia/ejs

我想知道如何在.ejs视图文件中包含另一个视图文件(部分)。


3
我相信,部分系统实际上是ExpressJS的一部分。您在使用Express框架吗?
Zikes 2011年

不,我没有使用它。.如果仅使用模板引擎是不可能的,那么我可能必须走这条路线。
jeffreyveon

Answers:


149

使用Express 3.0:

<%- include myview.ejs %>

路径是相对于包含文件的调用者的相对路径,而不是相对于通过设置的views目录的相对路径app.set("views", "path/to/views")

EJS包括

(更新:ejs v3.0.1的最新语法是<%- include('myview.ejs') %>


2
这应该是正确的答案,因为ejs / express的开发人员已更新了代码。
约书亚

2
在ejs2中,我拥有了像这样的代码,并且可以正常工作。<%include myview.ejs%>在ejs3中,它需要看起来像这样<%-include('myview.ejs')%>猜猜我花了多少小时才意识到我必须在开始时添加破折号?(只需添加此评论,以防其他情况相同的人读到它。)
Griffin

<%- include('partials/footer') %>也可以工作
Hos Mercury

20

在Express中,4.x我使用以下内容进行加载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'});
  });

然后,您只需要两个文件即可使其工作- views/index.ejs

<%- include partials/navigation.ejs %>

views/partials/navigation.ejs

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

您还可以告诉Expressejs用于html模板:

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'});
});

最后,您还可以使用ejs布局模块:

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

这将views/layout.ejs用作您的布局。


2
我错过了)错误,我不得不把它像<%-include('partials / navbar.ejs')%>
rickvian

18

适用于Express 4.x:

根据在模板中包含局部的正确方法你应该使用:

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

您正在使用:

<% include partials/yourFileName.ejs %>

已弃用。


10

从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 %>




0

    <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>


欢迎来到印度尼西亚Enividu的Stack Overflow。请考虑在答案中添加更多详细信息,而不仅仅是代码。
伊戈尔·埃斯科德罗

-3

EJS本身目前不允许查看局部视图。快递呢。


6
过时的信息。根据@pkyeck的评论,新版本支持它
Joshua
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.