我可以添加另一个.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
。这可能吗?
谢谢,
答案 0 :(得分:1)
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);