12

在我的 express 应用程序中,我已将视图引擎更改为 ejs。

有谁知道是否仍然可以利用视图模板?

4

4 回答 4

10

实际上 Express 3.X 之后是不支持 layout.ejs 的,如果要使用 layout,需要自己完成以下步骤:

  1. package.json在您的文件中添加依赖项“express-partials”:“*”
     “依赖”:{
       “快递”:“3.1.0”,
       “ejs”:“*”,
       “表达部分”:“*”
     }
  1. 执行npm install以安装最新版本express-partials
  2. 需要express-partials在你的app.js
    var partials = require('express-partials');
  3. 在in文件app.use(partials());下添加代码app.set('view engine', 'ejs');app.js

之后,您可以设计您layout.ejs并在您的文件中添加<%- body%>块,layout.ejs这就足够了并且运行良好。

于 2013-01-28T13:45:25.443 回答
8

你可以用这个模块来做......

https://github.com/aseemk/express-blocks

布局.ejs

<html>
    <body>
        <% include nav %>
        <h1><%= title %></h1>
        <%- body %>
    </body>
</html>

登录.ejs

<% layout('layout') -%>
<form>...</form>

导航.ejs

<nav>
  <% if ( session.logged_in ) { %>
    <a href="/account">account</a>
    <a href="/logout">logout</a>
  <% } else { %>
    <a href="/signup">signup</a>
    <a href="/login">login</a>
  <% } %>
  <a href="/">home</a>
</nav>

我使用的是 express-partials,但我发现 express-blocks 更适合 ejs 和 express 3.x。每次都必须传递数据时,使用 partials 很痛苦。随着<% include whatever %>数据已经可以访问。

在您的路线文件中,您可以像这样呈现:

exports.login.get = function(req, res){
  res.locals.session = req.session;
  res.render('login', { title: 'Login to your account' });
};
于 2012-09-22T22:10:43.250 回答
4

如果我没记错的话,Express.js 把它留给了模板引擎。因此,如果 ejs 不支持布局,那么您就不走运了。

于 2012-06-08T09:33:57.600 回答
0
  1. 安装 ejs-blocks 包npm install ejs-blocks

  2. 在您的 app.js 文件中导入包const engine = require('ejs-blocks'); 并配置视图引擎

    //settings
    app.set('views', path.join(__dirname, 'views'));
    app.engine('ejs', engine);
    app.set('view engine', 'ejs');
    
  3. 在 express 默认情况下,文件的名称是因此在您的视图文件夹中layout.ejs创建一个名为的文件,其中包含以下内容:layout.ejs

视图/layout.ejs

<html>
<head>
    <title><%= title %></title>
</head>
<body>
    <%- body %>
</body>
<%- blocks.js %>
</html>

<%= title %>从路由调用文件时获取值

router.get("/", (req, res) => {
    res.render("index", { title: "Hello world!" });
});
  1. 您的每个视图都必须layout.ejs在第一行导入文件,例如

意见/index.ejs

<% layout('layout') -%>
<h1>Article title</h1>
<p>Content</p>
  ...
<% block('js', `<script>
    ...
</script>`) -%>

您可以使用block将代码从视图插入到主布局。

于 2021-10-26T06:13:12.550 回答