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
。 这可能吗?
谢谢,
来自EJS文档 :
EJS并不特别支持块,但可以通过包含页眉和页脚来实现布局,如下所示:
<%- include('header') -%> <h1> Title </h1> <p> My page </p> <%- include('footer') -%>
虽然有些框架有一些处理问题的设施。 例如Express直到版本3.x有布局支持和最新版本,你可以使用它作为一个独立的npm包: express-partials
有了这个包,你可以在你的骨架模板( layout.ejs )中定义一个<%- body %>
区域,当你调用你想要的布局( content.ejs )时,express会将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);