Express 3和EJS中的布局

时间:2012-09-27 08:02:45

标签: node.js express ejs

在Express的第3版中删除了一些功能:

the concept of a "layout" (template engine specific now)
partial() (template engine specific)

更改日志:https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x

可以为EJS自己的名为partial()的功能更改include,但布局的替代方法是什么?

3 个答案:

答案 0 :(得分:18)

我也在努力解决这个问题。所以我提出了一个github项目,其中包含一个ejs和dustjs的例子。

https://github.com/chovy/express-template-demo

我不确定partial和include之间的区别,您不需要将数据显式传递给include。不确定为什么你会想要一个部分。

但是对于布局,您只需指定一个这样的块:

//layout.ejs
<html>
<%- body %>
</html>

//page1.ejs
<% layout('layout') -%>
This is loaded from page 1 and overrides <%- body %> in the layout.ejs.

如果有人想添加更多示例,只需提交拉取请求。

答案 1 :(得分:13)

似乎从Express 3,布局功能被委托给模板引擎的责任。您可以使用ejs-locals(https://github.com/RandomEtc/ejs-locals)进行布局。

安装ejs-locals

npm install ejs-locals --save

在app.js中使用ejs-locals作为您的应用引擎

var express = require('express');
var engine = require('ejs-locals');
...

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

现在您可以使用布局

layout.ejs
<body>
  <%- body %>
</body>

index.ejs
<% layout('layout') -%>

<div class="container">
<div class="jumbotron">
...

另一个选择是使用express-partials(https://github.com/publicclass/express-partials)。这两个人做同样的事情,所以这只是你的选择。

答案 2 :(得分:0)

您可以使用“include”选项模拟Express 2.x中的EJS布局。请在此处查看我的回答:

https://stackoverflow.com/a/12477536/446681