在EJS模板引擎中,如何"包含"页脚?

TIM*_*MEX 46 html javascript templates ejs

假设我保存了一个页脚的snipplet.如何在我当前的模板中"包含"该内容?

小智 82

我知道这个问题已被标记为已回答,但我相信你所寻找的是"部分"语法.在EJS中,您可以将一个视图模板中的内容包含在另一个视图模板中,如下所示:

<html>
  <head></head>
  <body>
    Blah blah blah
    <%- partial('footer') %>    
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

  • 新方法:http://stackoverflow.com/questions/11351691/ejs-partial-is-not-defined (10认同)
  • 谢谢!这应该被标记为正确的答案. (6认同)
  • 部分从EJS中删除,但您现在可以使用"包含"语法.请参见此处:http://stackoverflow.com/a/11835644/175082 (3认同)

Dan*_*Arl 46

EJS使用包含非常简单.以下是EJS README中的描述:

包含与包含include语句的模板相关,例如,如果您有"./views/users.ejs"和"./views/user/show.ejs",则使用<%include user/show%>.包含的文件字面上包含在模板中,编译后不执行IO,因此这些包含的模板可以使用局部变量.

<ul>
  <% users.forEach(function(user){ %>
    <% include user/show %>
  <% }) %>
</ul>
Run Code Online (Sandbox Code Playgroud)

因此,在您的情况下,如果页脚与您要包含它的文件位于同一目录中,则只需添加<% include footer %>到您的文件中即可.

  • 是的,这也会奏效.只要节点进程具有对它的读访问权,就可以使用文件系统上任何ejs文件的路径. (3认同)

Jac*_*kal 18

您可以包含ejs模板

<% include includes/header.ejs %>
Run Code Online (Sandbox Code Playgroud)

  • 我认为这不起作用,您需要使用 &lt;%- 而不是 &lt;% 来获取渲染输出 &lt;% 、 &lt;%- 和 &lt;%= 之间存在不同,请阅读文档 (2认同)

小智 14

正确的语法是 <%- include('<path>', <object with extra parameters>) %>

include 是一个函数 Includes 是相对于带有 include 调用的模板的。(这需要 'filename' 选项。)例如,如果您有“./views/users.ejs”和“./views/user/show.ejs”,您将使用 <%- include('user/show') ; %>。

您可能希望在包含中使用原始输出标记 (<%-) 以避免双重转义 HTML 输出。


小智 10

在同一目录中
<%- include('header'); -%>

根目录
<%- include('../partials/header'); -%>

适用于 EJS v3.0.1