EJS包含为包装器

时间:2017-01-20 11:08:13

标签: node.js ejs

我可以添加另一个.ejs文件来包装当前内容吗?

我想要这样的一般布局: layout.js:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
    <div id="header"></div>
    <div id="content">
    <!-- I want to "inject" my code here -->
    </div>
</body>
</html>

我希望从另一个文件中使用此模板,如下所示: content.ejs

<% inside(layout) ? { %>
<a href="">content</a>
<% } %>

我可以这样做吗?

我目前正在这样做,我用参数include_name调用布局,但它有点不方便。我想调用包含通用内容本身的相关content.ejs。这可能吗?

谢谢,

1 个答案:

答案 0 :(得分:1)

来自EJS Documentation

  

EJS不专门支持块,但布局可以   通过包括页眉和页脚实现,如下所示:

<%- include('header') -%>
<h1>
  Title
</h1>
<p>
  My page
</p>
<%- include('footer') -%>

虽然有些框架有一些处理问题的工具。例如Express直到版本3.x具有布局支持,对于最新版本,您可以将其用作独立的npm包:express-partials

使用此软件包,您可以在框架模板( layout.ejs )中定义<%- body %>区域,并在调用所需布局时使用 content.ejs ),express将 layout.ejs content.ejs 呈现为<%- body %>(除非您设置{layout:false}然后它只呈现 content.ejs ):

layout.ejs

<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <div id="header"></div>
    <div id="content">
      <%- body %>
    </div>
  </body>
</html>

content.ejs

<a href="">content</a>

app.js

var express = require('express')
  , partials = require('express-partials')
  , app = express();

// load the express-partials middleware
app.use(partials());

app.get('/',function(req,res,next){
  res.render('content.ejs') 
  // -> render layout.ejs with content.ejs as `body`.
})

app.listen(3000);